从按下的按钮获取返回值

我有一个弹出特定事件的表单。 它从数组中绘制按钮并将Tag值设置为特定值。 因此,如果您要按或单击此按钮,该函数应返回Tag值。

我怎样才能做到这一点? 我怎么知道点击了哪个按钮? 此时代码返回DialogResult,但我想从函数返回Tag值。 我该如何修改我的代码以便它可以做到这一点?

public static DialogResult SelectBox(string title, string[] btnArray, string[] btnValueArray) { Form form = new Form(); Button[] buttonArray; buttonArray = new Button[5]; form.Text = title; for (int i = 0; i < btnArray.Length; i++) { buttonArray[i] = new Button(); buttonArray[i].Text = btnArray[i]; buttonArray[i].Tag = new int(); buttonArray[i].Tag = btnValueArray[i]; buttonArray[i].TabStop = false; buttonArray[i].Location = new System.Drawing.Point(0, i * 40); buttonArray[i].Size = new System.Drawing.Size(240, 40); } form.ClientSize = new Size(240, 268); form.Controls.AddRange(new Control[] { buttonArray[0], buttonArray[1], buttonArray[2] }); form.FormBorderStyle = FormBorderStyle.FixedDialog; form.StartPosition = FormStartPosition.CenterScreen; form.MinimizeBox = false; form.MaximizeBox = false; DialogResult dialogResult = form.ShowDialog(); return dialogResult; } 

在表单中添加一个私有变量:

 private object SelectedTag; 

添加按钮单击处理程序:

 private void Button_Click(object sender, EventArgs e) { SelectedTag = ((Button)sender).Tag; } 

将处理程序分配给您创建的每个按钮:

 .. buttonArray[i].OnClick += form.Button_Click; .. 

然后在你的静态函数中,只需返回form.SelectedTag而不是dialogresult。

您可以为所有按钮调用相同的单击事件。 然后在你的处理程序:

 private void ButtonClick(object sender, EventArgs args) { Button oButton = (Button) sender; object data = oButton.Tag; } 

DialogResult属性已经告诉您单击了哪个按钮。 您可以设置每个单独的按钮以返回不同的DialogResult ,然后在函数的底部检查它。

如果要返回单击按钮的Tag属性,则需要将函数的返回值更改为Object (因为Tag属性的类型为Object )。

您可以在TestForm中添加ButtonClick事件处理程序,将按钮的标记设置为Form的标记。 这是样本。

主要表格:

  private void Form1_Load(object sender, EventArgs e) { Object tag; SelectBox("test", new String[] { "One", "Two", "Three" }, new String[] {"one value", "Two value", "three value" }, out tag); MessageBox.Show(tag.ToString()); } public static DialogResult SelectBox(string title, string[] btnArray, string[] btnValueArray, out Object tagValue) { TestForm form = new TestForm(); Button[] buttonArray; buttonArray = new Button[5]; form.Text = title; for (int i = 0; i < btnArray.Length; i++) { buttonArray[i] = new Button(); buttonArray[i].Text = btnArray[i]; buttonArray[i].Tag = new int(); buttonArray[i].Tag = btnValueArray[i]; buttonArray[i].TabStop = false; buttonArray[i].Location = new System.Drawing.Point(0, i * 40); buttonArray[i].Size = new System.Drawing.Size(240, 40); // subscribe to button click event.. // the handler is in TestForm buttonArray[i].Click += form.HandleOnButtonClick; } form.ClientSize = new Size(240, 268); form.Controls.AddRange(new Control[] { buttonArray[0], buttonArray[1], buttonArray[2] }); form.FormBorderStyle = FormBorderStyle.FixedDialog; form.StartPosition = FormStartPosition.CenterScreen; form.MinimizeBox = false; form.MaximizeBox = false; DialogResult dialogResult = form.ShowDialog(); // set the out args value tagValue = form.Tag; return dialogResult; } 

我们在SelectBox对话框中创建其实例的TestForm:

 public partial class TestForm : Form { public TestForm() { InitializeComponent(); } public void HandleOnButtonClick(Object sender, EventArgs e) { Button button = sender as Button; if (button != null) this.Tag = button.Tag; } } 

编辑:

如果要捕获每个按钮的值,则显示Dictionary Tags属性。