Feedback

C# - Steuerelemente zur Laufzeit hinzufügen

Veröffentlicht von am 3/19/2013
(1 Bewertungen)
Ein recht simples Snippet.
Im Beispiel wird eine Datei geladen, aus der dann Buttons hinzugefügt werden.
Jede Zeile steht für einen Button. Eine Zeile ist so aufgebaut:
%text%|%breite%|%höhe%|%left(x)%|%top(y)%|%rot%;%grün%;%blau%

Die Farbe in RGB kann auch durch "[default]" ersetzt werden. Somit entsteht ein Button mit aktivierten visuellen Effekten (und damit der System-Farbe 'Control'.

Beispiel-Datei unter: https://www.dropbox.com/s/lhbodrae4djn5xu/Test-Form.txt

[Edit:] Man hinterfrage bitte nicht den tieferen Sinn Buttons aus Dateien zu laden: Ist halt einfach ein Beispiel ;)
private void Form1_Load(object sender, EventArgs e)
{
    OpenFileDialog selectFile = new OpenFileDialog();
    selectFile.Title = "Select File";
    selectFile.Filter = "Text Files|*.txt|All Files|*.*";
    selectFile.FileName = "*.txt";
    if (selectFile.ShowDialog() == DialogResult.OK)
        LoadContent(selectFile.FileName);
    else
        Close();
}

private void LoadContent(string FileName)
{
    try
    {
        Text = Path.GetFileNameWithoutExtension(FileName);
        foreach (string line in File.ReadAllLines(FileName))
        {
            string[] info = line.Split('|');
            Button b = new Button();
            b.Text = info[0];
            b.Width = Convert.ToInt32(info[1]);
            b.Height = Convert.ToInt32(info[2]);
            b.Left = Convert.ToInt32(info[3]);
            b.Top = Convert.ToInt32(info[4]);
            if (info[5] != "[default]")
            {
                b.UseVisualStyleBackColor = false;
                string[] rgb = info[5].Split(';');
                b.BackColor = Color.FromArgb(Convert.ToInt32(rgb[0]), Convert.ToInt32(rgb[1]), Convert.ToInt32(rgb[2]));
            }
            b.Click += new System.EventHandler(this.ShowTextAsMsg);
            Controls.Add(b);
        }
    }
    catch
    {
        MessageBox.Show("Information could not be read.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        Close();
    }
}

private void ShowTextAsMsg(object sender, EventArgs e)
{
    MessageBox.Show("You pressed '" + ((Button)sender).Text + "'!");
}
Abgelegt unter Hinzufügen, Laufzeit, Komponenten.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!