2016-12-25 14 views
0

.csvファイルに書き込む別のフォームのテキストボックスの値を取得しようとしています。現時点では、ローカルデータベースを参照する「ログオン」フォームがあり、ログインに成功すると、.csvファイルに記録されたデータを入力することができます。 「ログオンしたユーザー」も含めたいと思います。最初のフォームのテキストボックスの値を把握していると思います。これを行う簡単な方法はありますか?私はテキストボックスを別のフォームに書き込む

string currentUser = Form2.textBox1.Text; 

を試してみましたが、しかし、これは

おかげ「Form2.textBox1は、その保護レベルにアクセスできない」を返します!

+0

form2デザインでは、 "Modifiers"プロパティを "internal"に変更します。 – Graffito

答えて

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!"; 
      } 
     } 
0

これは正しい方法ではありませんが、TextBoxを一般公開に変更することができます。その後、別の場所でアクセスすることができます。より洗練された方法は、UserNameと呼ばれるフォームにパブリックプロパティを追加することです。 Form2の名前をLogonFormに、TextBoxtextBox1からUserNameTextに変更するか、textBox1より意味のあるものを変更することをおすすめします。

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; 

ログオンフォームのインスタンスが必要です。あなたの質問のコードを見ると、テキストボックスの値に静的にアクセスしようとしているようです。

+0

ありがとう、私はそれを私の最初のフォームに追加しましたが、私の2番目のフォームからどのようにアクセスしますか? – Parakoopa

+0

pstrjds、ありがとう。私はここに閉じ込められています。これを行う必要があります。ボタンをクリックする前に何も記録されていないので、ログオンフォームのボタンをクリックすると信じています。 – Parakoopa

0

あなたはForm2の上のテキストボックスの内容を読み出し/書き込みするパブリックプロパティを作成することができます。

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

次に、あなたがこれを行うには多くの方法がありますform2.User

0

経由textBox1テキストボックスのテキストにアクセスすることができます。私は通常、グローバルなクラスSessionを作成し、ログに記録されたユーザー情報(セッション情報)を保存し、後で必要なときに情報を取得します。あなたは私の個人的な意見をしたい場合は、私はすべての時間に別のものに1つの形の公共の場でプライベートコントロールを避けるだろう

string currentUser = Session.LoggedUser; 

あなたのForm2で
//... 
Session.LoggedUser = user; // Adapt it for your use case 
//... 

そして最後に:ログオン時に

。しかし、実際にそうするケースもある。私が提案した2つの方法を決めることができます。 ;)