Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Controls (zb Button) wärend Laufzeit erzeugen
GreenApple
myCSharp.de - Member

Avatar #avatar-3014.png


Dabei seit:
Beiträge: 2
Herkunft: bayern

Themenstarter:

Controls (zb Button) wärend Laufzeit erzeugen

beantworten | zitieren | melden

Also, ich versuch mich kurz und knapp ausdrücken, ich habe mir mehrere gedanken darüber gemacht, jedoch bisher zu keiner funktionierenden lösung gekommen.
Also, was genau meine ich mit Objekten wärend der Laufzeit erzeugen.
Beispiel wäre:
Butten mit dem ein neuer button an einer variablen X/Y-position erzeugt werden soll, drückt man den button erneut, kommt ein weiterer.
bisher habe ich es mit folgendem probiert:


public void create (int x,string name)
            {
                
                System.Windows.Forms.Button newobjekt = new System.Windows.Forms.Button();
                newobjekt.Location = new System.Drawing.Point(12, x);
                newobjekt.Name = name;
                newobjekt.Size = new System.Drawing.Size(50, 50);
                newobjekt.TabIndex = 0;
                newobjekt.Text = name;
                newobjekt.UseVisualStyleBackColor = true;
                newobjekt.Show();
               
            }

in dem beispielcode ist nur die X-posi variable, ich weis, jedoch wie gesagt, scheint mir noch etwas zu fehlen. Hoffe auf baltige rückmeldung :D mit ideen und erklärungen.

PS: aufruf habe ich bisher nur mit normalen classen aufruf gemacht ^^, nicht dass es daran liegt.

mfg Apple ~
private Nachricht | Beiträge des Benutzers
Lars Schmitt
myCSharp.de - Experte

Avatar #avatar-2240.jpg


Dabei seit:
Beiträge: 2335
Herkunft: Witten

beantworten | zitieren | melden

Hallo GreenApple und Herzlich Willkommen hier im Forum,

Ein kleiner Rat zu Beginn, schau mal in unsere Community-Regeln
oder [Hinweis] Wie poste ich richtig? rein.

ich frage mich gerade seid wann ein Button eine Methode Show hat,

ZB. ein Form hat eine methode Show aber ein Button nicht.

Um Dir aber dennoch ein wenig zu helfen, schau Dir doch mal die Komplette Designer generierte Code Datei an und versuche diese Datei KOMPLETT zu verstehen.

Sobald Du diese Datei verstanden hast, wird Dir dein Fehler schnell bewußt werden.

Es tut mir leid, dass dies vermutlich nicht die Antwort ist die Du haben wolltest, Doch wir geben hier lieber Anleitungen zur selbsthilfe, anstatt Die das problem zu Lösen.
Das Bringt Dir einfach viel mehr.

Herzliche Grüße
Lars
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Lars Schmitt,
Zitat
ich frage mich gerade seid wann ein Button eine Methode Show hat,
Seit Anfang an. :-) Jedes Control und nicht nur die Forms haben Show- und Hide-Methoden, die bei normalen Controls einfach nur den Zustand von Visible ändern ...


Hallo GreenApple,

... allerdings ist bei neu erzeugten Control Visible ohnehin auf true. Du brauchst Show also nicht aufzurufen und es nützt auch nichts, wie du gemerkt hast.
Zitat
Doch wir geben hier lieber Anleitungen zur selbsthilfe, anstatt Die das problem zu Lösen.
So ist es!
Zitat
Um Dir aber dennoch ein wenig zu helfen, schau Dir doch mal die Komplette Designer generierte Code Datei an und versuche diese Datei KOMPLETT zu verstehen.
Um das vielleicht doch noch etwas einzugrenzen: Dir fehlt die Anweisung, mit der das Control zum Form hinzugefügt wird.

herbivore
private Nachricht | Beiträge des Benutzers
Lars Schmitt
myCSharp.de - Experte

Avatar #avatar-2240.jpg


Dabei seit:
Beiträge: 2335
Herkunft: Witten

beantworten | zitieren | melden

Hallo herbivore,

das mit dem Button stimmt, ich mach einfach schon zu lange WPF,

Natürlich hat ein Button eine Show Methode, was ja auch Sinn macht, da auch der Button eine Control ist und Die Show Methode genau aus dieser Ableitung herrührt.

Herzliche Grüße
Lars
private Nachricht | Beiträge des Benutzers
Tschebbe
myCSharp.de - Member



Dabei seit:
Beiträge: 34
Herkunft: BW - Kaiserstuhl

beantworten | zitieren | melden

Hallo,
ich hab ein aehnliches Problem und zwar moechte ich ein ganzes bestehndens Form immer wieder untereinander per Button_Click einfuegen.

Ist das so einfach moeglich oder muss ich quasi jedes Control element neu einfuegen? Weil ich koennte mir denke ich menge arbeit ersparen, wenn ich einfach ein ganzes Form an eine bestimme stelle "kopieren" koennte.

Vielen Dank fuer die Ideen.

Tom
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Tschebbe,

Controls kopieren kannst du nicht. Aber du kannst natürlich den Code zur Erzeugung deiner Controls in eine Methode packen und die dann immer wieder aufrufen.

herbivore
private Nachricht | Beiträge des Benutzers
Tschebbe
myCSharp.de - Member



Dabei seit:
Beiträge: 34
Herkunft: BW - Kaiserstuhl

beantworten | zitieren | melden

mh... das ist aber ungeschickt, ich dachte ich koennte mir jetzt einfach ein neues Form erstellen und dann darin mehrmals einfach mein altes bestehendes form hinzufuegen und auch wieder loeschen. d.h. ja jetzt fuer mich, ich muss meine komplette oberflaeche neu schreiben und dann ganz neu anfangen...

Gibts eine andere moeglichkeit, dass ich z.b. meine Forms halt zwei mal aufrufe und sich eben zwei fenster oeffnen und ich in beiden parallel arbeiten kann?

Tom
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Tschebbe,
Zitat
ich muss meine komplette oberflaeche neu schreiben und dann ganz neu anfangen...
ich verstehe nicht, wie du darauf kommst. Wenn du schon eine Oberfläche hast, hast du doch so gut wie allen Code, den du brauchst. Schau dir doch mal an, was der Designer an Code generiert. Den kannst du doch für meinen Vorschlag nehmen.

Weiteres Strichwort ist UserControl. Dadurch kannst du natürlich auch mehrere Controls logisch zusammen fügen, und dann quasi als ein Control behandeln.

herbivore
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3795
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Hallo Tom,

ich verstehe noch nicht so ganz was Du willst.

Wenn Du mehrere gleiche Forms nebeneinander haben willst kannst Du Dein Form mehrfach aufrufen. Allerdings können die Forms dann untereinander nicht (so einfach) kommunizieren.

Wenn Du mehrere gleichartige Eingabemasken untereinander haben willst dann pack Deine Controls doch in eine Groupbox und zeige die mehrfach an.
Die erste Groupbox baust Du im Designer, die weiteren legst Du per Code an :

textBox[i] = new TextBox();
textBox[i].Size = textBox1.Size;
textBox[i].Location = textBox1.Location;
...

Grüße Bernd
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BerndFfm am .
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Tschebbe
myCSharp.de - Member



Dabei seit:
Beiträge: 34
Herkunft: BW - Kaiserstuhl

beantworten | zitieren | melden

ja, also ich wollte mehrmals das selbe form in einem form aufrufen.
Das funktioniert bisher auch recht gut mit:


            ECOUserForm subform = new ECOUserForm();
            subform.TopLevel = false;
            subform.Parent = this;
            subform.Show();

und

IsMdiContainer=True;

Ist das keine so gaengige Methode ein from in ein anderes einbinden?

Jetzt muss ich das nur noch optisch irgendwie hinbkommen, aber das sollte ja kein problem werden.

Danke fuer die anregungen
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Tschebbe,
Zitat
und zwar moechte ich ein ganzes bestehndens Form immer wieder untereinander per Button_Click einfuegen.
also dabei dachte ich ehrlich gesagt nicht an MDI, sondern darum, dass es ihr darum geht den Inhalt eines Forms (also seine Controls) mehrfach in ein anderes Form einzufügen.

Aber wenn du MDI willst, ist es auch gut. Allerdings solltest du das nicht über die Zuweisungen

subform.TopLevel = false;
subform.Parent = this;

machen, sondern durch Setzen von MdiParent auf this des aufrufenden Forms.

herbivore
private Nachricht | Beiträge des Benutzers
Tschebbe
myCSharp.de - Member



Dabei seit:
Beiträge: 34
Herkunft: BW - Kaiserstuhl

beantworten | zitieren | melden

ok, also ich hab jetzt eine ganze weile herumprobiert und bin zu dem entschluss gekommen ein UserControl sei sinnvoll. Ich hab mein altes From in ein UserControl umgebaut und mir ein neue Host-Form gebaut mit dem ich mein UserControl immer wieder starten kann, dass funktioniert auch alles wunderbar.

Aber mein UserControl funktioniert nicht mehr zu 100%. eigentlich sollte es daten aus Excel bearbeiten und in eine Output datei schreiben. Mein OpenFileDialog und mein SaveFileDialog gehen noch. Dann start das UserControl einen Backgroundworker und da scheint irgendwie der hund begraben zu sein, weil er arbeitet und arbeitet und ich weiss nicht so richtig, wie ich einsehen kann was gearbeitet wird.

Gibt es eine moeglichkeit die Outputs des UserControls anzuschauen, weil bisher hatte ich meine ganzen sortier prozesse einfach mit Console.WriteLine() ausgegeben, aber das sehe ich ja jetzt nicht mehr, weil man auch mehrer starten kann.

Hier auch noch der Code, weil meistens sagt der mehr ;)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ButtonArrayproject
{
    class ButtonArray : System.Collections.CollectionBase
    {
        private readonly System.Windows.Forms.Form HostForm;

        public ButtonArray(System.Windows.Forms.Form host)
        {
            HostForm = host;
            this.AddNewButtonArray();
        }

        public void AddNewButtonArray()
        {
            ECOUserControl aUserControl = new ECOUserControl();
            this.List.Add(aUserControl);
            HostForm.Controls.Add(aUserControl);
            aUserControl.Top = Count * 400;
            aUserControl.Left = 100;
            aUserControl.Tag = this.Count;
        }

        public System.Windows.Forms.UserControl this[int Index]
        {
            get
            {
                return (System.Windows.Forms.UserControl)this.List[Index];
            }
        }
        public void Remove()
        {
           if (this.Count > 0)
           {
              HostForm.Controls.Remove(this[this.Count -1]);
              this.List.RemoveAt(this.Count-1);
           }
        }
    }
}

host Form


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ButtonArrayproject
{
    public partial class Form1 : Form
    {
        ButtonArray MyControlArray;

        public Form1()
        {
            InitializeComponent();
            MyControlArray = new ButtonArray(this);

        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            MyControlArray.AddNewButtonArray();
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            MyControlArray.Remove();
        }
    }
}


[EDIT]
Ich hab gerade festgestellt, dass Excel gar nicht mehr gestartet wird. Obwohl es davor in einem Form ging.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tschebbe am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Tschebbe,
Zitat
Console.WriteLine() ausgegeben, aber das sehe ich ja jetzt nicht mehr, weil man auch mehrer starten kann.
die Sichtbarkeit von Console.WriteLine-Meldungen hängt überhaupt nicht davon ab, ob du nun ein Form oder mehrere UserControls hast.
Zitat
ich weiss nicht so richtig, wie ich einsehen kann was gearbeitet wird.
Mit dem Debugger. Beachte dazu auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore
private Nachricht | Beiträge des Benutzers
Tschebbe
myCSharp.de - Member



Dabei seit:
Beiträge: 34
Herkunft: BW - Kaiserstuhl

beantworten | zitieren | melden

gut die probleme waren auch gleich behoben.

Jetzt wird Excel aber tortzdem noch nicht gestartet.
private Nachricht | Beiträge des Benutzers
Tschebbe
myCSharp.de - Member



Dabei seit:
Beiträge: 34
Herkunft: BW - Kaiserstuhl

beantworten | zitieren | melden

ok. ganz grosser fehler meinerseits ...
private Nachricht | Beiträge des Benutzers