将textbox.Text写入另一个表单

时间:2016-12-25 21:21:37

标签: c# wpf forms textbox

我试图以另一种形式获取文本框的值以写入.csv文件。目前我有一个引用本地数据库的“登录”表单,然后在成功登录后,他们能够输入记录到.csv文件的数据。我还想包括“登录用户”,我想到的最好的方法就是抓住第一个表单上文本框的值。有一个简单的方法吗?我试过了

string currentUser = Form2.textBox1.Text;

但是这会返回“Form2.textBox1由于其保护级别而无法访问”

谢谢!

4 个答案:

答案 0 :(得分:1)

我能够结合你的答案来解决这个问题。我想我会把它贴在这里。感谢你的帮助!添加了评论以显示我最终添加的内容。

"LOGIN FORM" 

Namespace Project1

    public partial class AuthenicationForm : Form
    {
        public AuthenicationForm()
        {
            InitializeComponent();
        }
        //Added currentUser
        public static string currentUser;
        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"blahbalhbalhablh");
            con.Open();
            SqlCommand sqlcmd = new SqlCommand(blahblahblah);
            SqlDataReader sqldr;
            sqldr = sqlcmd.ExecuteReader();
            int count = 0;
            while (sqldr.Read())
            {
                count += 1;
            }
            if(count == 1)
            {
                //Grabbed textBox text on buttonclick after filled out
                currentUser = textBox1.Text;
                this.Hide();
                Form1 ss = new Form1();
                ss.Show();
            }

"Recorder Form"

namespace Project1
{
    public partial class RecordForm: Form
    {
        public string newFile = "Place to save" + DateTime.Now.ToString("MM-dd-yyyy") + ".csv"; 
        public RecordForm()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            var UPC = textBox1.Text;
            var APCUPC = "00000";
            if (UPC.Length == 9 && UPC.Contains(APCUPC))
            {
                //grabbed the currentUser from the previous form
                File.AppendAllText(newFile, LoginForm.currentUser + "," + UPC + "," + DateTime.Now.ToString() + Environment.NewLine);
                this.BackColor = System.Drawing.Color.Green;
                this.label1.Text = "Scan successful, continue!";
                textBox1.Text = "";
            }
            else
            {
                this.BackColor = System.Drawing.Color.Red;
                this.label1.Text = "Scan unsuccessful, try again!";
            }
        }

答案 1 :(得分:0)

我并不是说这是正确的方法,但您可以将TextBox更改为公开。然后,您将能够在其他地方访问它。更简洁的方法是将公共属性添加到名为UserName的表单中。我还建议将Form2的名称更改为LogonForm,将TextBox的名称从textBox1更改为UserNameText或更有意义的内容textBox1。< / p>

public string UserName
{
    get
    {
        return textBox1.Text;
    }
}

// Then you can use it like this (where Form2 is an instance of the logon form)
string currentUser = Form2.UserName;

请记住,您需要登录表单的实例。查看问题中的代码,看起来您似乎试图静态访问文本框的值。

答案 2 :(得分:0)

您可以创建一个公共属性来读取/写入Form2上的TextBox内容:

public class Form2
{
    public string User
    {
        get { return textBox1.Text; }
        set { textBox1.Text = value; }
    }
}

然后,您可以通过form2.User

访问textBox1的文本

答案 3 :(得分:0)

有很多方法可以做到这一点。我通常会创建一个全局类Session,我会在其中存储记录的用户信息(会话信息),然后在需要时检索信息。

登录时:

//...
Session.LoggedUser = user; // Adapt it for your use case
//...

最后在你的Form2:

string currentUser = Session.LoggedUser;

如果您需要我的个人意见,我将始终避免以一种形式公开对另一种形式进行私人控制。但是,在某些情况下,我实际上是这样做的。我会让你决定我提出的方法。 ;)