2

我设法创建textboxes了在每次单击按钮时在运行时创建的。当我点击它们时,我希望文本textboxes消失。我知道如何创建事件,但不知道动态创建的文本框。

我如何将它连接到我的新文本框?

private void buttonClear_Text(object sender, EventArgs e)
{
    myText.Text = "";
}
4

6 回答 6

7

这是为每个新创建的文本框分配事件处理程序的方式:

myTextbox.Click  += new System.EventHandler(buttonClear_Text);
于 2013-03-01T14:58:24.097 回答
5

这里的 sender 参数应该是发送的文本框,即使您需要将其转换为正确的控件类型并将文本设置为正常

if (sender is TextBox) {
     ((TextBox)sender).Text = "";
}

将事件注册到文本框

myText.Click  += new System.EventHandler(buttonClear_Text);
于 2013-03-01T14:55:33.337 回答
2

你的问题不是很清楚,但我怀疑你只需要使用sender参数:

private void buttonClear_Text(object sender, EventArgs e)
{
    TextBox textBox = (TextBox) sender;
    textBox.Text = "";
}

(方法的名称在这里不是特别清楚,但由于问题也不是,我无法建议更好的方法......)

于 2013-03-01T14:55:21.023 回答
1

当您创建 textBoxObj 时:

RoutedEventHandler reh = new RoutedEventHandler(buttonClear_Text);
textBoxObj.Click += reh;

我认为(不是 100% 肯定)你必须将听众改为

private void buttonClear_Text(object sender, RoutedEventArgs e)
{
  ...
}
于 2013-03-01T14:58:56.673 回答
1

我猜 OP 想清除创建的所有文本textBoxes

private void buttonClear_Text(object sender, EventArgs e)
{
  ClearSpace(this);
}

public static void ClearSpace(Control control)
{
    foreach (var c in control.Controls.OfType<TextBox>())
    {
        (c).Clear();
        if (c.HasChildren)
            ClearSpace(c);
    }
}
于 2013-03-01T14:59:48.213 回答
1

这应该可以完成工作:

    private void button2_Click(object sender, EventArgs e)
    {
        Button btn = new Button();
        this.Controls.Add(btn);

        // adtionally set the button location & position

        //register the click handler
        btn.Click += OnClickOfDynamicButton;
    }

    private void OnClickOfDynamicButton(object sender, EventArgs eventArgs)
    {
        //since you dont not need to know which of the created button is click, you just need the text to be ""
        ((Button) sender).Text = string.Empty;
    }
于 2013-03-01T15:06:10.977 回答