C#在表单之间交换值

时间:2014-01-28 05:15:44

标签: c# forms datagridview

我正在为音乐会和类似的东西制作售票系统。 当我从comboBox中选择事件时,会打开一个新表单,显示DataGridView中该节目的可用票证。不关闭包含计费数据的主表单。当我双击所选的票证时,需要关闭带有datagridview的辅助表单,将某些值发送到活动窗口。我不知道怎么做最后一部分。

我将事件从comboBox发送到新窗口以进行查询:

Boleto b = new Boleto(comboBox8.Text);
                b.Show();

然后我打开连接并将select加载到DGV

    try
    {
        connStr = "Server=localhost;Database=quanax;Uid=root;Pwd=root;Port=3306";
        conn = new MySqlConnection(connStr);
        conn.Open();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: No se puede conectar con la base de datos");
        MessageBox.Show(ex.ToString());
    }

    try
    {
        string query = "select id_boleto as 'Id', fecha as 'Fecha', evento as 'Evento', seccion as 'Sección', fila as 'Fila', asiento as 'Asiento', bloque as 'Bloque', total as 'Precio' from boletos where evento = '" + evento + "';";
        mySqlDataAdapter = new MySqlDataAdapter(query, conn);
        mySqlCommandBuilder = new MySqlCommandBuilder(mySqlDataAdapter);
        dataTable = new System.Data.DataTable();
        mySqlDataAdapter.Fill(dataTable);
        bindingSource = new BindingSource();
        bindingSource.DataSource = dataTable;
        dataGridView1.DataSource = bindingSource;
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error! Intenta de nuevo");
        MessageBox.Show(ex.ToString());
    }

双击时,我将所需的值输入变量

                 try
                {
                    MySqlCommand cmdc = new MySqlCommand("select seccion, fila, asiento, bloque, total from boletos where id_boleto ="+toolStripTextBox1.Text+";", conn);
                    MySqlDataAdapter dataadapc = new MySqlDataAdapter(cmdc);
                    System.Data.DataTable datatabc = new System.Data.DataTable();
                    dataadapc.Fill(datatabc);

                    aux1 = Convert.ToString(datatabc.Rows[0][0]);
                    aux2 = Convert.ToString(datatabc.Rows[0][1]);
                    aux3 = Convert.ToString(datatabc.Rows[0][2]);
                    aux4 = Convert.ToString(datatabc.Rows[0][3]);
                    aux5 = Convert.ToString(datatabc.Rows[0][4]);                    
                }

                catch (IndexOutOfRangeException ex)
                {
                }

                catch (Exception ex)
                {
                    MessageBox.Show("Error: No se puede conectar con la base de datos");
                    MessageBox.Show(ex.Message);
                }

如果我需要关闭主窗体,那么重载构造函数应该是解决方案:

try
            {
                this.Close();         
                Form1 f1 = new Form1(aux1, aux2, aux3, aux4, aux5);
                f1.Show();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                MessageBox.Show(ex.ToString());
            }

但是,由于我没有关闭主窗口,如何在关闭辅助窗体时将值aux1,aux2,aux3,aux4和aux5发送到活动窗体?我希望我清楚自己。感谢。

3 个答案:

答案 0 :(得分:1)

我可以建议两种方式: 1.使用“ShowDialog()”。这样,您可以将aux1,aux2 ...设置为属性,并从主窗体中轻松获取数据:

Boleto b = new Boleto(comboBox8.Text);
b.ShowDialog();
this.aux1 = b.aux1;
.
.
  1. 将“this”作为参考传递,并在主窗体中包含属性以保存这些辅助值。所以你可以打电话给我。重载你的构造函数。确保在某处保存Mainform实例。

    public Boleto(string text, MainForm form){//Code here}
    
  2. 然后你可以在关闭之前进行设置:

    form.aux1 = aux1;
    

答案 1 :(得分:0)

您可以声明一个静态字符串列表然后使用它。例如,在您的主表单中使用:

public static List<string> Values = new List<string>();
// then add your strings into a list
Values.Add("String1");
Values.Add("String2");
Values.Add("String3");
Values.Add("String4");
Values.Add("String5");

然后在您的辅助表格中使用它们:

foreach(string s in MainForm.Values)
{
    // and do what ever you want
}

答案 2 :(得分:0)

可用方法之一是在两种形式下使用一个数据,在第二种形式下更改以第一种形式共享更改。 另一种方法是在第一个表单处理Closed事件并使用第二个表单属性。 ...

你应该决定你想做什么! 我希望这会有所帮助。