【问题标题】:How to pass a value from one Form to a private TextBox in another Form?如何将一个表单中的值传递给另一个表单中的私有文本框?
【发布时间】:2019-04-20 22:57:05
【问题描述】:

我有 Form1 和几个 private 文本框。我想将 Form2 中的 DataGridView 中的一些值传递给Form1 中的那些文本框(例如,当我按 Enter 时)。
我想要做的是将DataGridView中当前选定Row的行的值传递给Form1中的TextBoxes:

(我知道如何在 datagridview 中获取所选行的值,我的问题只是标题...)

if (e.KeyCode == Keys.Enter)
{
    SqlCommand sqlcmd = new SqlCommand("SELECT ID FROM X WHERE ID=" +
                        dataGridView1.CurrentRow.Cells[0].Value + "", sqlcon);
    SqlDataReader sqldr = sqlcmd.ExecuteReader();
    while (sqldr.Read())
    {
        Form1.CodeTextBox = sqldr[codecolumn].Tostring
        Form1.NameTextBox = sqldr[Namecolumn].Tostring
        Form1.BlahTextBox = sqldr[Blahcolumn].Tostring                               
    }
}

对我大喊大叫:

codeTextBox 是私有的...由于保护原因无法这样做 等级...

我想我必须创建一个静态类才能这样做,但我不知道如何。
如果有人能解释一下,我会很高兴的。

Form1类:

 public partial class Form1 : Form
 {
    public static string searchString;

    SqlConnection sqlcon = 
       new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Database1.mdf;Integrated Security=True");

    public Form1()
    {
        InitializeComponent();
        SqlDataAdapter sqlda = new SqlDataAdapter("GetInvoice", sqlcon);
        DataTable dt = new DataTable();
        sqlda.Fill(dt);
        dataGridView1.DataSource = dt;
     }
      //Xbuton_click datagridview_blah ...
}

【问题讨论】:

  • 你能告诉我们你Form1类吗?
  • 尝试让您的codeTextBox 实例为public
  • @D-Shih 我展示了 Form1。有必要吗?如果它不让我知道缩短问题
  • @D-Shih 请告诉我怎么做?
  • 您希望传递数据是什么?因为你使用sqldr.Read()可能会读取不止一行的数据。我在您的form1中没有看到和文本框类

标签: c# winforms class static public


【解决方案1】:

用如下参数声明私有变量和 Form1 构造函数:

private string CodeTextBox; private string NameTextBox; private string BlahTextBox;

Public Form1(string CodeTextBox , string NameTextBox, string BlahTextBox)
{
  this.CodeTextBox= CodeTextBox; 
  this.NameTextBox= NameTextBox; 
  this.BlahTextBox = BlahTextBox; 
}

为文本框赋值

txtCodeTextBox.Text = CodeTextBox;
txtNameTextBox.Text = NameTextBox;
txtBlahTextBox.Text = BlahTextBox;

这样称呼

if (e.KeyCode == Keys.Enter)
{
  SqlCommand sqlcmd = new SqlCommand("SELECT ID FROM X WHERE ID=" + dataGridView1.CurrentRow.Cells[0].Value + "", sqlcon);
  SqlDataReader sqldr = sqlcmd.ExecuteReader();
  while (sqldr.Read())
  {
   string CodeTextBox = sqldr[codecolumn].Tostring;
   string NameTextBox = sqldr[Namecolumn].Tostring;
   string BlahTextBox = sqldr[Blahcolumn].Tostring;
   Form1 frm = new Form1(CodeTextBox, NameTextBox, BlahTextBox);
  }
}

【讨论】:

  • 好吧,你有 3 个代码块,我照你说的做了。但它在第一个代码块中声明部分时对我大喊大叫。它说_the type Form1 already contains a defenition for 'codetexbox'_。除此之外,您在第一个代码块中编写了 2 次 CodeTextBox 变量,在您的第二个代码块中编写了 1 次。我也无法区分这些和其他类似的变量...例如:当您说txtCodeTextBox.Text = CodeTextBox; 时,txtCodeTextBox.Text 是什么意思,您指的是哪个CodeTextBoxprivate string CodeTextBox;Public Form1(string CodeTextBox)?
  • 我应该在哪里给文本框赋值?我应该在哪里写这段代码?txtCodeTextBox.Text = CodeTextBox; txtNameTextBox.Text = NameTextBox; txtBlahTextBox.Text = BlahTextBox; 在 form1 或 form2 中? (我想了解您的想法以及您的意思)
【解决方案2】:

试试这个

CodeTextBox 文本更改事件

 public void CodeTextBox_TextChanged(object sender, EventArgs e)
        {
            CodeTextBox.Text = ((TextBox)sender).Text;
        }

SqlDataReader

 while (sqldr.Read())
                     {
        Form1 form1 = new Form1();
        TextBox t = new TextBox();

        t.Text=sqldr[codecolumn].Tostring;

        form1.CodeTextBox_TextChanged(t,null);

                        }

【讨论】:

  • 你能解释一下你的第一个代码块吗?它是做什么的,发件人是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多