1

我有一个小问题,我有一个我可以form1用两个按钮打开的。Button1 用作打开 form2 并将详细信息插入 SQL DB,这可以在 form1 datagridview 中看到。Button2 打开相同的 form2,但它从 form1 中选择数据并自动将它们填充到 form2 的文本框中 - 它类似于编辑。button1button2form2

当我创建button2(编辑按钮)时出现问题,因为form2不知道从哪个按钮打开。

我认为每次打开时form2我都应该通过integer,所以当加载 form2 时,它应该决定从哪个按钮打开它并据此采取行动。

有人能帮我解决这个问题吗?

谢谢

4

4 回答 4

2

您需要更改表单 2 的构造函数以以不同的“模式”打开表单

像这样 :

Form2.cs

    public Form2(bool fromButton2)
    {
        InitializeComponent();
        //Do whatever with that bool
    }

你打开你的表格是这样的:

Form1.cs

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(false);
        frm.Show();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(true);
        frm.Show();
    }

然后您可以使用 fromButton2 bool 应用您的逻辑

于 2013-07-04T12:50:30.867 回答
1

您应该创建 a)一个新的构造函数,它采用按钮引用(更好的名称,或者您可以放入其未使用的属性“Tag”以识别它们的任何内容)或 b)一个公共方法,您在打开表单之前调用它(但之后实例化它)或 c)form2 中的一个属性,它可以接受任何你决定用作“区分的东西”。

好 ?

于 2013-07-04T12:48:46.640 回答
1

定义一个新的构造函数form2,它将一个字符串、调用按钮的名称作为参数,并从按钮将按钮的名称作为参数发送到,form2并在 form2 中检查名称ButtonName参数以检测调用者按钮。

于 2013-07-04T12:49:34.020 回答
1

就个人而言,而不是传递按钮或文本或布尔值,我会明确并创建一个枚举 - 将其传递给构造函数,以便您知道您是否处于编辑或显示模式。(如果需要新的“模式”,这将涵盖您)例如

 public enum EditingType
    {
        Display,
        Editing
    }

    public class Form2
     {
        private EditingType _editingType;

        public Form2(EditingType editingType)
        {
            _editingType = editingType;
        }

        public void DoSomething()
        {
            if (_editingType == EditingType.Display)
            {
                // display mode
            }

            if (_editingType == EditingType.Editing)
            {
                // editing mode
            }
        }
     }

并调用 - Form2 form2 = new Form2(EditingType.Editing); (根据您正在处理的按钮单击传递编辑或显示)

于 2013-07-04T12:54:40.360 回答