2016-08-07 12 views
0

私のアプリケーションでは、データを渡すために常に非表示のテキストボックスを使用しています。今私はこれをやめたい。だから私はこれを行う方法を学ぶ必要があります。そして、今私はパブリックForm1()からプライベートvoid richTextBox1_KeyDownに文字列を渡す問題で立ち往生しています。どのように機構が文字列を渡すために働くのか分かりません。あなたがしなければc#パブリックForm1からPrivateボイドに文字列を渡します。

public Form1(string file) 
{ 
    InitializeComponent(); 
    StreamReader sr = new StreamReader(file); 
    string filetext = sr.ReadToEnd(); 
    richTextBox1.Text = filetext; 
    string TITLE = file.Split(new string[] { @"\" }, StringSplitOptions.None).Last(); 
    this.Text = TITLE; 
} 

文字列のファイルは次のようなものが含まれます:ここで

は私のコードである "(アプリケーション)とのオープン":C:\ Users \ユーザー管理\ダウンロード\ text.tyx 開いた場合生の.exeファイルの場合、文字列は空になります。ここで

は、私は、文字列ファイルが空であるかどうかをキャッチしたい部分です:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.S && e.Control) 
    { 
     if (Form1(???) != "") 
     { 
      richTextBox1.SaveFile(Form1(???), RichTextBoxStreamType.PlainText); 
     } 
    } 
} 

私が入れた「???」私は何をすべきかについて何の手がかりもない。 助けてください

+0

同じフォームまたは異なるフォームのテキストボックスですか? – Sajeetharan

+0

現在、テキストボックスに保持している値を保持する静的な文字列を入れないのはなぜですか? – brykneval

+0

同形式サジェタラン – KrisPus

答えて

2

fileNameをメンバー変数として保存し、どこでも使用できます。 File.ReadAllText(_filename)を使用してファイルを読む:目に見えないテキストボックスの使用を停止したいに関する部分について

private readonly string _fileName; 

public Form1(string fileName) 
{ 
    InitializeComponent(); 
    _fileName = fileName; 
    richTextBox1.Text = File.ReadAllText(_fileName); 
    Text = _fileName.Split(new[] {@"\"}, StringSplitOptions.None).Last(); 
} 

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.S && e.Control) 
    { 
    if (_fileName == "") 
    { 
     richTextBox1.SaveFile(_fileName, RichTextBoxStreamType.PlainText); 
    } 
    } 
} 
+0

編集中に保存できなかったので試しましたが、それは問題ではありません。文字列が渡されたかどうかを確認するためにメッセージボックスを使用しました。 "MessageBox.Show(_fileName);"どうもありがとう! – KrisPus

+0

未処理例外を回避し、エラーをユーザーに表示するには、try-catchブロックを常に追加します。 –

+0

私は知っています。しかし、私はここでそれが必要であるとは思わない。 – KrisPus

0

これを見ると、Form1にはパラメータとして文字列を取得するコンストラクタがあります。あなたのForm1のようなものに見えるかもしれインスタンス化 したがってコード:あなたのForm1のコードに沿って文字列ファイルを使用するためには

Form1 form1 = new Form1("Some String"); 
form1.Show(); //or form1.ShowDialog(); 

は、次のようにForm1クラスにメンバ変数を定義することができます。

class Form1:Form 
{ 
    private string _file; 

    public Form1(string file) 
    { 
     InitializeComponent(); 
     _file= file; 

     // Your code 
    } 

}

は今、すべてのあなたがForm1に沿っ_file知られている、あなたはそれを使用することができます。

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.S && e.Control) 
    { 
     if (!string.IsNullOrEmpty(_file)) 
     { 
      richTextBox1.SaveFile(_file, RichTextBoxStreamType.PlainText); 
     } 
    } 
} 
0

を、私はあなたがビジネスロジックとフォームロジックを結合し、デカップリングデータに見てください。

しかし、最小限の変更で、他のものが述べたように、KeyDownイベントでアクセスできるように、Form1に状態(ファイル名)を保存するだけで済みます。

+0

あなたは私を軌道に乗せることができる例、リンク、または何かを持っていますか?それは私が興味を持ったもののように聞こえるからです。 – KrisPus

関連する問題