Avatar billede Slettet bruger
28. juli 2007 - 19:49 Der er 28 kommentarer og
1 løsning

Strække element i form til at passe til parent-element?

Hej eksperter!

Er der en logisk måde at strække et element, så eksempelvis dets bredde passer præcis ind i det element, det er placeret i? Hvis jeg nu eksempelvis har en GroupBox med to RichTextField's over hinanden, og jeg vil have felterne til at røre GroupBox'ens indre kanter (pricist)?
Avatar billede kalp Novice
28. juli 2007 - 19:53 #1
som i

RichTextField1
________Indrer kant__________
RichTextField2


eller hele vejen rundt?

_____________________________
RichTextField1
________Indrer kant__________
RichTextField2
_____________________________


dvs. hvor top og bund også er klistret til de 2 textfields
Avatar billede Slettet bruger
28. juli 2007 - 21:02 #2
Hvis jeg skal gøre det hele vejen rundt, ved jeg allerede, at jeg (hvis der kun et ét element inde i det andet) kan bruge Dock = DockStyle.Fill.
Men, som du først foreslog, leder jeg efter en metode til at "klistre" en bestemt (eller flere bestemte) kanter sammen. Altså som:
_____________
| _GroupBox_ |
||_RichText_||
| __________ |
||_RichText_||
|____________|

I det tilfælde med de to RichText-felters x-positioner og bredder låst, så de er som limet til GroupBoxen's indre vertikale kanter.
Avatar billede Slettet bruger
28. juli 2007 - 21:02 #3
Hov... Det skal vist ses med Courier (New), får at være "læseligt" ;)
Avatar billede Slettet bruger
28. juli 2007 - 21:13 #4
Helt specifikt skal jeg bruge det til at lave en form med følgende struktur (alle elementer skal være "klsitret" sammen):

Form
|-TagControl
    |-TagPage
          |-GroupBox
              |-GroupBox
              |    |-Label
              |    |-TextField
              |-GroupBox
              |    |-Label
              |    |-RichTextField
              |    |-RichTextField
              |    |-Button
              |-GroupBox
                    |-Label
                    |-RichTextField
                    |-RichTextField
                    |-Button
Avatar billede Slettet bruger
28. juli 2007 - 21:17 #5
De tre "inderste" GroupBox'e skal stå under hinanden.
Avatar billede Slettet bruger
28. juli 2007 - 21:17 #6
Kan jeg bruge en tabel?
Avatar billede Spotgun Seniormester
29. juli 2007 - 11:00 #7
Har du prøvet med DockStyle.Top?

Jeg mindes at have lavet noget lignende, hvor jeg brugte Top i stedet for Fill, og det gav den ønskede effekt.
Avatar billede Slettet bruger
30. juli 2007 - 21:05 #8
Tja, det kunne jeg bruge til den øverste GroupBox (og jeg kan gøre noget lignende ved den nederste), men hvad så med den mellemste? :P
Det er problemet...
Avatar billede Spotgun Seniormester
30. juli 2007 - 21:16 #9
Hmm... godt spørgsmål :)

Kan du evt. komme med et screenshot af hvordan det ser ud nu, og evt. markere hvor det er de sidste rettelser mangler? Det gør det nok lidt nemmere at finde en løsning.
Avatar billede Slettet bruger
30. juli 2007 - 21:29 #10
Tja, jeg er begyndt at lave det med tabeller... Sender et screenshot når jeg har noget læseligt færdigt :)
Avatar billede Slettet bruger
30. juli 2007 - 21:57 #11
Whee tabellerne klarede jobbet... Men koderne er blevet noget indviklede :P
Avatar billede Slettet bruger
30. juli 2007 - 22:19 #12
Lige et sekund... Uploader et screenshot om lidt.
Avatar billede Slettet bruger
30. juli 2007 - 22:25 #13
Avatar billede Spotgun Seniormester
30. juli 2007 - 22:28 #14
På den facon ja... Det havde jeg sgu ikke lige regnet ud, men det ser da fint ud nu i hvert fald :)
Avatar billede Slettet bruger
30. juli 2007 - 22:34 #15
Hvordan ændrer jeg forresten baggrundsfarven på diverse elementer, f.eks. TabPage?
Avatar billede Slettet bruger
30. juli 2007 - 22:34 #16
Hehe tak ;)
Avatar billede Slettet bruger
30. juli 2007 - 22:44 #17
Doh, endnu et lille spørgsmål: Hvordan reffererer jeg til instansen af mit hovedvindue? Det er oprettet således:

static void Main(string[] args)
{
    Application.Run(new MainWindow());
}

Og jeg skal bruge det i følgende metode:

private void Encrypt(object sender, System.EventArgs e)
{
    Program.MainWindow.MainEncryptionResult.Text = Alias.Encrypt(MainEncryptionSubject, MainCodex.Text);
}

...hvor MainEncryptionResult, MainEncryptionSubject og MainCodex er elementer i MainWindow.

Men metoden virker ikke som den er nu, fordi der ledes efter de relevante elementer i klassen og ikke instansen. Hvordan undgår jeg dette problem?
Avatar billede Spotgun Seniormester
30. juli 2007 - 22:46 #18
Skift dens BackColor property, eller brug:
tabPage1.BackColor = Color.Blue;
Avatar billede Spotgun Seniormester
30. juli 2007 - 22:48 #19
...og det andet spørgsmål:

brug instansnavnet i stedet for Program.MainWindow. Prøv med "mainWindow1" eller "this".
Avatar billede Spotgun Seniormester
30. juli 2007 - 22:49 #20
Hov, din MainEcryptionResult.Text, er det en textbox på hovedvinduet? I så fald skal du bruge dens instansnavn i stedet for!
Avatar billede Slettet bruger
30. juli 2007 - 23:05 #21
Tak, tak og hovsa. Men hvordan opretter jeg så hovedformen (her MainWindow) med et navn til identifikation? Eksempel søges!
Avatar billede Slettet bruger
30. juli 2007 - 23:10 #22
Okay, det her ser lidt syret ud...
http://toke.maqhem.com/blue.bmp
Kan jeg ikke gøre selve "tabberne" og kanterne blå også?
Avatar billede Spotgun Seniormester
31. juli 2007 - 08:57 #23
Det lader til at man skal override TabControl'ens drawmode, og selv i sving med penslen.

Der er et par links her:
http://www.dotnet247.com/247reference/msgs/58/293401.aspx
http://www.codeproject.com/cs/miscctrl/ColoringTabControl.asp
Avatar billede Spotgun Seniormester
31. juli 2007 - 09:16 #24
Mht. dit andet spørgsmål, så kan du i MainWindow klassen tilgå instansen af MainWindow med navnet "this". This refererer altid til den instans af klassen du befinder dig i.

Hvis du f.eks. skal tilgå noget i MainWindow klassen fra en anden klasse, så kan du evt. sende MainWindow instansen med til den nye klasse som et parameter. Her er et hurtigt eksempel. Har oprettet en WinApp med en form der indeholder en knap (button1). Har tilføjet en klasse, som har en metode til at skifte baggrundsfarve på formen.

MainForm.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestApp
{
    public partial class MainWindow : Form
    {
        private OtherClass oc;

        public MainWindow()
        {
            InitializeComponent();
            oc = new OtherClass(this);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            oc.SetBackColorOnMainWindow(Color.Blue);
        }
    }
}

OtherClass.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;

namespace TestApp
{
    class OtherClass
    {
        private MainWindow parent;

        public OtherClass(MainWindow parent)
        {
            this.parent = parent;
        }

        public void SetBackColorOnMainWindow(Color color)
        {
            parent.BackColor = color;
        }
    }
}

Hvis vi kigger på OtherClass, så peger "parent" nu på din instans af MainWindow. "this" vil i denne klasse selvfølgelig pege på instansen af dit OtherClass objekt.

Gi'r det mening?
Avatar billede Slettet bruger
31. juli 2007 - 10:27 #25
Hmm... Nej. Kikker lige ærmere på det :P
Avatar billede Slettet bruger
31. juli 2007 - 10:27 #26
*nærmere
Avatar billede Spotgun Seniormester
31. juli 2007 - 10:49 #27
Så burde du nok kigge nærmere på noget objekt orienteret programmering. Der er masser af links og bøger om emnet, og det vil sikkert kunne hjælpe dig fremover med din programudvikling.
Avatar billede Slettet bruger
31. juli 2007 - 11:12 #28
Jep.
Avatar billede Slettet bruger
31. juli 2007 - 11:12 #29
WHAT?! Jeg sendte lige en del af koden, men den dukkede aldrig op som en kommentar... Hm. Ligemeget, jeg roder selv med det. Tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester