首页 文章

从另一个表单调用一个表单上的方法,如果单击Form2上的一个按钮,则在Form1上填充组合框

提问于
浏览
2

我想在Form1上填充一个组合框,当单击Form2上的OK按钮时 .

首先,单击Form 1上的Load Form 2按钮以显示Form 2 . 然后,出现Form2,如果按下OK(Form2上的按钮),则必须使用SQL SERVER数据库表中的值填充Form1 ComboBox .

public partial class FORM1 : Form
{
     public void LoadValue()
        {
            string query = "SELECT FullName FROM Studs ";

            SqlCommand cmd = new SqlCommand(query, FORM1conn);

                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    FORM1COMBOBOX.Items.Add(reader.GetString(0));
                }
        }
}

public partial class FORM2 : Form
{
        private void FORM2_OK_Button_Click(object sender, EventArgs e)
        {
               //HERE I WANT TO CALL THE  LOADVALUE() METHOD OF FORM1  ????????
         }
}

enter image description here

EDIT: 在form2.cs中:

public partial class FORM2 : Form
{

    public  FORM2(SqlConnection connfromFORM3)
    {
        Form2Conn = connfromFORM3;
        InitializeComponent();
    }

    private Form1 form1;
    public SELECTGROUPHEADDIALOG(FORM1 form1) : this()
    {
        this.form1 = form1;
    }

        private void FORM2_OK_Button_Click(object sender, EventArgs e)
        {
               //HERE I WANT TO CALL THE  LOADVALUE() METHOD OF FORM1  ????????
         }
}

2 回答

  • 2

    Updated

    您可以尝试在Form2的构造函数中传递Form1实例

    例:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(this);
            form2.Show();
        }
    
        internal void TestMethod()
        {
            throw new NotImplementedException();
        }
    }
    
    public partial class Form2 : Form
    {
        private Form1 form1;
    
        public Form2()
        {
            InitializeComponent();
        }
    
        public Form2(Form1 form1)
            : this()
        {
            // TODO: Complete member initialization
            this.form1 = form1;
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            form1.TestMethod();
        }
    }
    

    Updated

    试试这个:

    public  FORM2(SqlConnection connfromFORM3, FORM1 form1)
    {
        this.form1 = form1;
        Form2Conn = connfromFORM3;
        InitializeComponent();
    }
    
  • 7

    您的设计听起来像Form2用作对话框 . 虽然您的设计方法很好,但实现和架构却不是 . 当您显示Form2时,您应该使用ShowDialog方法调用,并等待DialogResult . 如果DialogResult没问题,那么你知道你应该填充你的ComboBox . 至于从Form2返回数据,您需要公开Form1可以访问的属性或字段 . 这是一个代码示例:

    Form1.cs

    namespace CrossFormAccess {
        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
    
        public partial class Form1 : Form {
            public Form1() {
                InitializeComponent();
            }
    
            private void ShowForm2(object sender, EventArgs e) {
                using (Form2 form = new Form2()) {
                    DialogResult result = form.ShowDialog();
                    if (result == DialogResult.OK) {
                        comboBox1.Items.Clear();
                        comboBox1.Items.AddRange(form.Items);
                    }
                }
            }
        }
    }
    

    Form2.cs

    namespace CrossFormAccess {
        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
    
        public partial class Form2 : Form {
            public Form2() {
                InitializeComponent();
            }
    
            public object[] Items;
    
            private void DoWork(object sender, EventArgs e) {
                Items = new object[] { "hello", "world" };
                DialogResult = DialogResult.OK;
            }
        }
    }
    

    Form1上只有一个ComboBox和Button,按钮显示form2,而Form2上只有一个调用DoWork的按钮 . 您可以在准备关闭表单时通过设置来控制DialogResult . “Items”字段将是您的数组或数据源返回数据的集合 .

相关问题