从按下的按钮获取返回值

时间:2011-01-25 09:12:22

标签: c# .net compact-framework

我有一个弹出特定事件的表单。它从数组中绘制按钮并将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;
}

4 个答案:

答案 0 :(得分:7)

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

private object SelectedTag;

添加按钮点击处理程序:

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

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

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

然后在静态函数中,只需返回form.SelectedTag而不是对话结果。

答案 1 :(得分:2)

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

private void ButtonClick(object sender, EventArgs args)
{
  Button oButton = (Button) sender;

  object data = oButton.Tag;
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以在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<String, Object>标签属性。