-1

我现在可以传输值,问题出在开关案例中,我进行了切换,以便能够将数据传输到多个表单,仅放置打开的表单,我不能在开关中这样做,它在运行时进入默认案例,所以问题是on (FORMID) 我如何正确使用 switch case 这里是我的 form1 代码

public partial class Form1 : Form
{
    Form2 f2 = new Form2();
    public Form1()
    {
        InitializeComponent();
        f2.setParent(this);
        f2.MdiParent = this.MdiParent;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        f2.Show();
        f2.Activate();
    }
}

}

这个表格2代码:

public partial class Form2 : Form
{
    public int FORMID = 0;
    private Form1 f1;
    private Form3 f3;
    DataTable dt;

    public Form2()
    {
        InitializeComponent();
    }

    void load_table()
    {
        string constring = "Data Source =.; initial Catalog = business; Integrated Security=SSPI;";
        SqlConnection CN = new SqlConnection(constring);
        SqlCommand cmd = new SqlCommand("select * from T_AKARAT_BUILDING_TP", CN);
        try
        {
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            dt = new DataTable();
            sda.Fill(dt);
            BindingSource bsource = new BindingSource();
            bsource.DataSource = dt;
            dataGridView1.DataSource = bsource;
            sda.Update(dt);
        }
        catch { }
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        load_table();
    }

    public void setParent(Form1 parentValue)
    {
        f1 = parentValue;
    }

    public void setParent(Form3 parentValue)
    {
        f3 = parentValue;
    }

    private void dataGridView1_DoubleClick(object sender, EventArgs e)
    {
        switch (FORMID)
        {
            case 1:

        f1.textBox1.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][0].ToString();
        f1.textBox2.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][1].ToString();
        this.Hide();
        break;
            case 2:
        f3.textBox1.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][0].ToString();
        f3.textBox2.Text = dt.Rows[dataGridView1.CurrentCell.RowIndex][1].ToString();
        this.Hide();
        break;
            default:
        MessageBox.Show("plz select");
        break;
        }
        this.Hide();
    }
}

}

我在表格 2 中将文本框修饰符设置为公开,但此代码不起作用&我不知道这里缺少什么或错误希望对我有所帮助

希望有人纠正我的代码而不是举例

4

6 回答 6

1

为此,您可以使用该类在类中创建一个 class1.cs 代码,例如:

class Class1
{
    public string firstName;
    public string lastName;
    public Class1 FirstName(string firstname)
    {
        this.firstName = firstname;
        return this;
    }
    public Class1 LastName(string lastname)
    {
        this.lastName = lastname;
        return this;
    }
}

form1 中的代码:

Class1 c = new Class1();
private void button1_Click(object sender, EventArgs e)
{
    c.firstName = dataGridView1.CurrentRow.Cells[1].Value.ToString();
    c.lastName = dataGridView1.CurrentRow.Cells[2].Value.ToString();
}

现在您可以将此代码用于所有程序

另一种形式的示例:

label1.text = c.firstName;
label2.text = c.lastName;

祝你好运

于 2013-06-30T13:09:23.047 回答
0

另一种方法是,在 form2 中定义两个公共变量,并将 form1 中的这个值设置为这些变量,然后在 form2 Enter Event 中将这些变量设置为文本框

于 2013-06-30T13:07:07.273 回答
0

不幸的是,您没有说明哪一行代码导致了“未设置对象引用”异常。而且,由于我们看不到您的所有代码,因此我们必须猜测问题可能出在哪里。

当您实例化 Form2 时,您必须设置它的 MdiParent 属性。然而,您在 Form2 构造函数中使用了该 MdiParent 属性(这也不正确):

public form2()
{
    InitializeComponent();
    // neither one of the following lines make any sense, get rid of them
    //form1.setParent(this);
    //form1.MdiParent = this.MdiParent; 
}

您没有显示在 Form1 中实例化 Form2 的代码,但需要这样做:

// somewhere in Form1
Form2 FDAS = new Form2();
FDAS.MdiParent = this;

另外,因为 form1 是一个 MdiParent,我认为当你 .Close() 它时你也会得到错误,所以我不确定你为什么这样做!

于 2013-06-30T16:55:56.873 回答
0

也许像这样.. FDAS 必须首先声明为 Form 类

public void setParent()
{
    FDAS = form2;
}
于 2013-06-30T15:25:36.787 回答
0

为文本框分配值应该按照您的方式工作。但是,您的代码没有调用 FDAS.Show。

还有你的关闭表格1,因此你可能必须声明一个新的表格1来设置父母

于 2013-06-30T13:17:57.820 回答
0

在 cellmousedoubleclick 事件中尝试,我输入的名称只是示例,您可以更改为您自己的名称:

private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
       Form2 f2 = new Form2();
       f2.textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
       f2.Show();
}

如果文本框的访问修饰符是公共的,这将执行。

这 2 个示例会将您的 2 个文本框文本放置到,1º 示例 - 列值 -,2º 示例 - 行值。

        private void dataGridView1_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {

            Form2 f2 = new Form2();
            f2.textBox1.Text = dataGridView1.Rows[0].Cells[e.ColumnIndex].FormattedValue.ToString();
            f2.textBox2.Text = dataGridView1.Rows[1].Cells[e.ColumnIndex].FormattedValue.ToString();
            f2.Show();
        }

        private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            Form2 f2 = new Form2();
            f2.textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString();
            f2.textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[1].FormattedValue.ToString();
            f2.Show();
        }
于 2013-06-30T13:23:44.527 回答