2015-05-15 21 views
-1

我正在使用C#創建一個應用程序,它可以通過串行與Arduino進行通信。我有按鈕通過串行發送某些字母來告訴Arduino要做什麼。 Arduino將控制RGB LED燈帶。但我希望用戶能夠添加按鈕並在用戶按下按鈕時發送RGB值。我已經想出瞭如何添加按鈕和所有,但我想知道如何爲已添加的每個按鈕創建單個事件處理程序。允許用戶控制會發生什麼

int h = 5; 
int l = 5;  
private void addButton_Click(object sender, EventArgs e) 
{ 
    Point newLoc = new Point(h, l); 
    List<Button> buttons = new List<Button>(); 
    Button newButton = new Button(); 
    newButton.Text = buttonNameTextBox.Text; 
    newButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(199)))), ((int)(((byte)(13))))); 
    newButton.Size = new Size(150, 50); 
    newButton.Font = new System.Drawing.Font("Calibri", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
    newButton.Location = newLoc; 
    newLoc.Offset(0, newButton.Height + 5); 
    newButton. 
    buttons.Add(newButton); 
    newButton.Name = componentNameTextBox.Text; 
    this.Controls.Add(newButton); 
    l += 65; 
    newButton.Click += new EventHandler(newButton_Click); 
} 

所以這就是我必須創建按鈕和放置按鈕。我的最終目標是能夠讓用戶輸入他們想要的LED的RGB值,以便當按下按鈕時它將發送它們。

+4

您可以將一個事件處理程序到多個公司然後使用'sender'參數來確定哪個按鈕被點擊。 –

回答

1

無論是使用相同的事件處理程序,所有的人(即newButton_Click),並使用sender參數來確定被點擊其中一個,或使用將有機會獲得所有周圍的變量已經內嵌lambda表達式:

int h = 5; 
int l = 5;  
private void addButton_Click(object sender, EventArgs e) 
{ 
    Point newLoc = new Point(h, l); 
    List<Button> buttons = new List<Button>(); 
    Button newButton = new Button(); 
    newButton.Text = buttonNameTextBox.Text; 
    newButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(253)))), ((int)(((byte)(199)))), ((int)(((byte)(13))))); 
    newButton.Size = new Size(150, 50); 
    newButton.Font = new System.Drawing.Font("Calibri", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
    newButton.Location = newLoc; 
    newLoc.Offset(0, newButton.Height + 5); 
    newButton. 
    buttons.Add(newButton); 
    newButton.Name = componentNameTextBox.Text; 
    this.Controls.Add(newButton); 
    l += 65; 
    newButton.Click += (s, ea) => { 
     //Here is an event handler just for this button. You can access 
     //the surrounding variables (such as l, or newButton.BackColor etc) right here. 
    }; 
} 

你說你希望允許用戶在傳遞值 - 對,你可能有3個文本框做這樣的假設,這意味着這個功能看起來是這樣的:

private void addButton_Click(object sender, EventArgs e) 
{ 
    /* as before... */ 

    int red = Convert.ToInt32(txtRed.Text); 
    int green = Convert.ToInt32(txtGreen.Text); 
    int blue = Convert.ToInt32(txtBlue.Text); 

    newButton.BackColor = System.Drawing.Color.FromArgb(red, green, blue); 

    newButton.Click += (s, ea) => { 
    //made up function call to show how you can use the rgb values inline here 
    ArduinoController.SendRGB(red, green, blue); 
    } 
} 
相關問題