C# 如果语句由按钮触发,请单击

C# 如果语句由按钮触发,请单击,c#,C#,这是我的密码: 公共静态字符串名称; 私有void openWindow(对象发送器、事件参数) { 如果(按钮名称1.PerformClick){ name=“name1”; } 如果(按钮名称2.PeformClick) { name=“name2”; } 其他的 { name=“name3”; } this.Hide(); Form2 Form2=新Form2(); form2.ShowDialog(); } 所以我有三个按钮,每一个都应该在点击时打开一个新的相同窗口。但每个按钮都必须在

这是我的密码:

公共静态字符串名称;
私有void openWindow(对象发送器、事件参数)
{
如果(按钮名称1.PerformClick){
name=“name1”;
}
如果(按钮名称2.PeformClick)
{
name=“name2”;
}
其他的
{
name=“name3”;
}
this.Hide();
Form2 Form2=新Form2();
form2.ShowDialog();
}
所以我有三个按钮,每一个都应该在点击时打开一个新的相同窗口。但每个按钮都必须在字符串(名称)中保存不同的名称

我在这个
if
条件下的目标正是这样,但是VS2017说PeformClick不能转换为bool类型

第二,这意味着该按钮没有PeformClick的定义

我怎样才能解决这个问题

还是我从一开始就完全错了?

这是作为点击处理程序附加到所有三个按钮上的“打开窗口”吗?那么“发送者”就是那个特定的按钮,你只需要将它转换。您可以预先设置属性并在处理程序中读取其值

private void openWindow(object sender, EventArgs e)
{
    Button clickedButton = (Button)sender;
    name = clickedButton.Tag;

    // create form etc
}

假设您有树按钮,并且所有的点击事件都附加到
openWindow
下面的东西可以为你工作

public static string name;
private void openWindow(object sender, EventArgs e)
{
    Button senderButton = (Button)sender;
    if (senderButton == button1)
    {
        name = "name1";
    }
    else if (senderButton == button2)
    {
        name = "name2";
    }
    else
    {
        name = "name3";
    }
    this.Hide();
    Form form2 = new Form();
    form2.ShowDialog();
}

实际上,这是@Hans Kesting提供的方法的完整代码。

您应该处理每个文本框的“单击”事件,并可能调用一个方法来打开新表单<代码>按钮名称1。单击+=按钮名称1\u单击并实现按钮\u name1\u Click(和其他)作为事件处理程序(对象发送器、事件参数)“我从一开始就尝试了完全错误的方法吗?”--可能。例如,
Button
类的
PerformClick()
成员是一个方法,但您试图将其当作
bool
属性来使用。另一方面,您的第二个
if
语句试图访问
PeformClick
,而不是
PerformClick
,这肯定根本不存在。但是最大的警告标志是您的
静态字符串名
字段。不清楚您对该字段做了什么,但您不应该使用字段将数据从一种方法传递到另一种方法,更不用说
静态
字段了。尽管如此,您还没有为任何人提供足够的上下文来提供一个好的答案。如果你真的想走这条路,你需要改进这个问题。请参阅和。将按钮处理程序中的代码提取到返回的单独方法中。现在,您可以从按钮单击事件处理程序和从
openWindow
方法调用它。@OguzOzgul-我会避免为每个按钮创建事件处理程序。“这是作为点击处理程序附加到所有三个按钮上的“openWindow”吗?”-不。如果是,那么代码就没有意义(它将导致堆栈溢出异常)。@Sinatr-你在说什么?“这里不可能出现堆栈溢出的情况。”詹恩很乐意帮忙。但是请注意“name”是一个静态字段,可能有更好的传递方式values@Enigmativity,对不起,在我的脑海中,这是一张清晰的照片,显示OP正在点击一些“打开表单”按钮的点击事件处理程序中的其他按钮。我错了。