2017-11-06 1 views
0

Ich versuche, eine App developp für die Benutzer eine Menge Computerkonfiguration zu erstellen, mit O/Sprache/etc ...C# - Fügen Sie benutzerdefinierte Eigenschaft/Attribut neue Schaltfläche

Wenn er eine Konfiguration bestätigen, würde ich wie die Wahlen in einem benutzerdefinierten Attribut Schaltfläche

private void VALIDATE_Click(object sender, EventArgs e) 
      { 

       string Computer = Text_Computer.Text; 
       if (myList.Any(str => str.Contains(Computer))) 
       { 
        MessageBox.Show(Computer+"Already Exist"); 
       } 
       else 
       { 
        Button button = new Button(); 
        button.Size = new System.Drawing.Size(195, 30); 
        button.Tag = Computer; 
        button.Name = Computer; 
        button.Text = Computer; 
        button.CustomOS = comboBox_OS.SelectedItem; 
        button.CustomLanguage = comboBox_Language.SelectedItem; 
        flowLayoutPanel3.Controls.Add(button); 
        myList.Add(Computer); 
        MessageBox.Show(Computer + "added"); 
       } 

in meiner GUI gespeichert werden, wenn Benutzer eine Konfiguration bearbeiten möchten, klicken Sie auf er auf die neue Schaltfläche sind die Konfiguration und alle Entscheidungen darstellen zurück, wie:

comboBox_OS.SelectedItem = button.CustomOS; 
comboBox_Language.SelectedItem = button.CustomLanguage; 

Ist das möglich, mein benutzerdefiniertes Attribut wie button.CustomOS und button.CustomLanguage zu erstellen?

Grüße

+1

Sie können Ihre eigene Schaltfläche erstellen, die die reguläre erbt und addieren, was Eigenschaften Sie es wünschen ... –

+0

Sie sollten Ihre Ansicht und Ihr Modell trennen. Anstelle der Schaltfläche selbst, die die Daten enthält, sollten Sie eine Klasse haben, die die Daten darstellt, und dann die Schaltfläche lesen, um die benötigten Informationen aus dieser Klasse zu lesen. –

Antwort

1

Es ist möglich und ziemlich einfach. Sie leiten nur eine neue Klasse von der ursprünglichen Schaltfläche ab und deklarieren zwei neue Eigenschaften. Ich habe den Code in ein einfaches Beispiel eingefügt.

using System; 
using System.Windows.Forms; 

namespace StackOverflow 
{ 
    public partial class FormMain : Form 
    { 
     public FormMain() 
     { 
      InitializeComponent(); 
     } 

     private void cbOS_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      //Save selection. 
      ComboBox cb = (ComboBox)(sender); 
      btn1.CustomOS = cb.SelectedItem.ToString(); 
     } 

     private void btnSelect_Click(object sender, EventArgs e) 
     { 
      //Restore selection on click. 
      MyButton btn = (MyButton)(sender); 
      cbOS.SelectedItem = btn.CustomOS; 
     } 

     //Declare a new class deriving from the original Button. 
     public class MyButton : Button 
     { 
      public String CustomOS { get; set; }  
      public String CustomLanguage { get; set; } 
     } 
    } 
} 
+0

Danke ThymiosK, es funktioniert gut für die Erstellung neuer Eigenschaften, aber ich habe ein Problem, Daten wiederherzustellen, ich klicke auf die neue Schaltfläche, aber nichts passiert, wie man click_event auf Code verwalten, wenn die Schaltfläche noch nicht erstellt? – twenty94470

+0

Ich antworte zu schnell, ich füge hinzu: "btn.Click + = new System.EventHandler (btn_Click);" und es ist perfekt, vielen Dank noch einmal :) – twenty94470

+0

Ich bin froh, dass Sie es ausgearbeitet haben. Allerdings würde ich Ihnen empfehlen, mit einer Art Datenbank zu arbeiten. Zum Beispiel, SQL. Das Speichern von Informationen in Controls ist eine temporäre Lösung. – ThymiosK

Verwandte Themen