我试图以另一种形式获取文本框的值以写入.csv文件。目前我有一个引用本地数据库的“登录”表单,然后在成功登录后,他们能够输入记录到.csv文件的数据。我还想包括“登录用户”,我想到的最好的方法就是抓住第一个表单上文本框的值。有一个简单的方法吗?我试过了
string currentUser = Form2.textBox1.Text;
但是这会返回“Form2.textBox1由于其保护级别而无法访问”
谢谢!
答案 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
答案 3 :(得分:0)
有很多方法可以做到这一点。我通常会创建一个全局类Session
,我会在其中存储记录的用户信息(会话信息),然后在需要时检索信息。
登录时:
//...
Session.LoggedUser = user; // Adapt it for your use case
//...
最后在你的Form2:
string currentUser = Session.LoggedUser;
如果您需要我的个人意见,我将始终避免以一种形式公开对另一种形式进行私人控制。但是,在某些情况下,我实际上是这样做的。我会让你决定我提出的方法。 ;)