Laden...

Forenbeiträge von Console32 Ingesamt 258 Beiträge

13.03.2012 - 16:38 Uhr
this.Invalidate(new Rectangle(this.rotaryEncoder1.Location, this.rotaryEncoder1.Size), true);

Dadurch wird das DrawBackground aufgerufen und man erhält wieder den Transparenten Hintergrund

Habs zuerst im OnPaint versucht:
this.Parrent.Invalidate(...)
Das endet in Flimmern da der GUI Thread nichts anderes mehr macht als das Control neu zu zeichnen.

mfg

EDIT: war gestern zu schnell wollte noch sagen das auf dem hintergrund zeichnen nicht so flexibel ist wie ein skalierendes UserControl, das ich mir nur aufs Bild ziehen muss.

13.03.2012 - 15:43 Uhr

Hallo Community:

Ich habe in einem Userdefined Control mit Transparentem Hintergrund einen Drehgeber abgebildet,

mit:

        
       protected override void OnPaintBackground(PaintEventArgs e)
        {
            //base.OnPaintBackground(e);
        }

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x20; //WS_EX_TRANSPARENT
                return cp;
            }
        }

Wird das ganze auch wunderbar Transparent und man sieht im Hintergrund das Bauteil auf dem der Drehgeber sitzt, nun mache ich im OnPaint meine Ganzen Zeichnungen. Soweit so gut, solange der Drehgeber steht sieht das wunderbar aus,

Bei bewegung bleiben jedoch die alten linien erhalten.
Mein erster Gedanke war ein graphics.Clear(Color.Transparen) dadurch wird das ganze aber schwarz?!

Weiss jemand wie man ein Transparentes Control "Cleart" ?

mfg

09.02.2012 - 12:15 Uhr

weil ich noch nie mit XML als Resource gearbeitet habe / bzw weil das das erste war was google / msdn ausgespuckt hat und ich keine Ahnung von Serialisierung habe.
Bei möglichkeit werde ich mich damit beschäftigen.

zum Dispose:
nein das Form wird nur geschlossen (wird als ShowDialog angezeigt)und somit nicht Disposed.
Nachdem ich im onLoad jetzt this.Visible = true; gesetzt habe funktioniert es.

09.02.2012 - 11:12 Uhr

Hallo

Soweit ist das alles kein Problem die Xml Datei wird erzeugt,
jedoch hab ich ein Problem beim setzten der Sichtbarkeit.

Beim Programmstart funktioniert alles wunderbar, wenn ich ein "Positonsset" auswähle bei dem weniger Controls angezeigt werden sieht es genau so aus wie ich es im Vorhinen gespeichert habe.

Ändere ich jetzt jedoch das "Positionsset" zur Laufzeit, sind alle Childcontrolls weg.

Hier die Rekursive Funktion welche die daten aus dem XML File lädt:

 private static void LoadControl(XmlNode root, Control.ControlCollection controls, XmlDocument doc)
        {
            XmlNode xmlNode;
            foreach (Control control in controls)
            {
                xmlNode = null;
                foreach (XmlNode node in root.ChildNodes)
                {
                    if (node.Attributes[0].Value == control.Name)
                    {
                        xmlNode = node;
                        break;
                    }
                }
                if (xmlNode != null)
                {
                    LoadControl(xmlNode, control.Controls, doc);

                    control.Location = new Point(Convert.ToInt32(xmlNode.Attributes[1].Value), Convert.ToInt32(xmlNode.Attributes[2].Value));
                    control.Visible = Convert.ToBoolean(xmlNode.Attributes[3].Value);
                    control.Width = Convert.ToInt32(xmlNode.Attributes[4].Value);
                    control.Height = Convert.ToInt32(xmlNode.Attributes[5].Value);
                }
            }
        }

control.Visible = Convert.ToBoolean(xmlNode.Attributes[3].Value);

In der Zeile bleibt das Visible Attribut auf false (Obwohl es sich um Controls OHNE ChildControls handelt / Und das Convert.ToBoolean true zurückliefert)

leider bin ich nocht nicht fündig geworden warum das Attribute auf false bleibt :S
Weiß jemand was es damit auf sich hat?

08.02.2012 - 09:27 Uhr

Spontan würde ich alle Controls mit dem Designer so anordnen, wie ich sie haben möchte, dann die Anwendung starten und dann zur Laufzeit die XML-Datei programmatisch erzeugen (dazu alle Controls rekursiv durchgehen).

Das wird es wohl werden.
Dachte das Problem hätte vl schon jemand gehabt.

08.02.2012 - 09:09 Uhr

Hallo,

Ob nun ein XML oder die Config,
das problem ist nicht die Realisierung sondern der aufwand. Die Positionsdaten für ~30-200 Controlls * 16 Forms * bis zu 7 unterschiedliche "Positionssets" zu schreiben, ist viel aufwand.

Im Programm sieht es dann so aus das auf einer Steuerung eine Variable entscheidet welches Hintergrundbild geladen wird, zum Bild dazu soll ein "Positionsset" für die Controls geladen werden

Das ganze soll zur Laufzeit NUR Geladen werden, und im vorhinein von mir definiert werden.

Meine Frage war eher ob es andere Möglichkeiten gibt die Positionen aller Controls zu speichern (idealerweiße im Designer), oder möglicherweiße eine Fertiges Modul für die Laufzeit welches ich implementiere damit ich meine Positionsdaten nicht "zu Fuß" schreiben muss.
(bzw damit ich mir die Funktionalität Save / Load PositionSet nicht selbst bauen muss) Ich hatte gehofft das jemand schon mit einem ähnlichen Problem zu tun hatte. 😉

07.02.2012 - 13:13 Uhr

Hallo,

ich habe folgendes Problem bei meinem Programm,
und zwar habe ich auf einigen Forms, verschiedene Hintergrundbilder (wird von einer steuerung entschieden)
Je nach Hintergrundbild sollen dann zur laufzeit die Steuerelemente (einmalig) angeordnet werden.

Jetzt habe ich das Problem das ich bis zu ca 7 unterschiedliche Positionen für meine Steuerelemente habe welche irgendwie sinnvoll Organisiert werden müssen.

Ich dachte an ein XML, jedoch wollte ich nachfragen ob es auch andere/elegantere Lösungen gibt oder auch schon fertige Lösungsansätze.

19.12.2011 - 09:57 Uhr

Hallo Community

Ich habe ein Problem mit dem beenden eines Threads:

Der Thread sieht in etwa so aus:

try
            {
                this.m_Running = true;
                while (this.m_Running)
                {
                    this.GetValues();
                    this.Refresh();

                    System.Threading.Thread.Sleep(100);
                }
            }

und beim Beenden (FormClosing event)

  private void Form_2_FormClosing(object sender, FormClosingEventArgs e)
        {
            End();
        }

        private void End()
        {
            this.m_Running = false;
            Thread.Sleep(300);


            while (this.m_oThread.IsAlive) 
            {
                Thread.Sleep(50);
            }


        }

Das Überschriebene Refresh ändert ein paar Pictureboxen nach den Werten von GetValues und ruft dann über ein Delegate die Basisklasse auf um das Paintereigniss der Oberfläche auszulössen. Da ich andere Werte der Oberfläche über das Paint ereigniss ändere.

Das problem ist das delegate, wenn ich das delegate weglasse funktioniert es einwandfrei.

Mit delegate hängt er in der schleife fest, und der oben genannte Thread macht nichts mehr!

wär schön wenn mir jemand Helfen könnte.
mfg
Console