2016-06-28 14 views
-1

をハンドラに値を渡す:今すぐが、私はこのようなコード持って

private void button1_Click(object sender, EventArgs e) 
{ 
    openFileDialog1.ShowDialog(); 
} 
private void openFileDialog1_FileOk(object sender, CancelEventArgs e) 
{ 
    string ext = Path.GetExtension(openFileDialog1.FileName); 
    if(string.Compare(ext, ".FDB") == 0) 
    { 
     string fileName = openFileDialog1.SafeFileName; 
     string fileDirectory = Path.GetDirectoryName(openFileDialog1.FileName); 
     string databaseTxt = @"C:\Users\arist\AppData\Roaming\TDWork\"; 
     string[] database = { fileDirectory + fileName }; 
     if (Directory.Exists(databaseTxt)) 
     { 
      System.IO.File.WriteAllLines(databaseTxt + "databases.txt", database); 
     } 
     else 
     { 
      DirectoryInfo di = Directory.CreateDirectory(databaseTxt); 
      System.IO.File.WriteAllLines(databaseTxt + "databases.txt", database); 
     } 
    } 
    else 
    { 
     MessageBox.Show("Fajl koji ste izabrali nije Firebird baza (.FDB)"); 
     e.Cancel = true; 
    }       
} 

を、私は、同じファイルダイアログを開き、複数のボタンを作成したいです。問題は、私は別のテキストボックスにopenFileDialogディレクトリを渡したいと思うことです。だから、ロジックはこれです:

私はボタン1で開く場合は、TextBox1テキストボックスに値を渡す、 私はボタン2で開いた場合、私はボタン3で開いた場合、textbox3に値を渡すTextBox2を、 に値を渡します。

私はbutton1を押すとチェック= 1をOpenDialog1_FileOkに渡すので、私はちょうどそこに切り替えてアクションを実行するので、int check(1,2,3)を作成したかったのです。

問題はハンドラに渡す方法とそれが可能なのかわかりません。また、他に解決策がある場合は、それを書いてください。

+0

ここで、テキストボックスからテキストを使用しますか? –

+0

@MongZhuどこにも、ちょうど – Pacijent

+0

を表示するために、どこに表示したいですか?同じ「書式」で?または 'OpenfileDialog'で? –

答えて

1

ファーストあなたはopenfiledialogを全く新しい機能を扱わずに、このように使うことができます:

if(openFileDialog1.ShowDialog() == DialogResult.OK){ 
    //...code 
} 

第2に、目標を達成するためには、コントロールの名前が目的の数字に完全に一致するようにする必要があります(例: "button1"と "textbox1")。そうすれば、次のようにすることができます:

void Button1Click(object sender, EventArgs e) 
    { 

     //MessageBox.Show(bt.Name[bt.Name.Length - 1].ToString()); 
     if(openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 

      if(!Path.GetExtension(openFileDialog1.FileName).EndsWith(".FDB")) //checking if the extension is .FDB (as you've shown in your example) 
      { 
       MessageBox.Show("Fajl koji ste izabrali nije Firebird baza (.FDB)"); 
       return; //return if it's not and no further code gets executed 
      } 

      string fileDirectory = Path.GetDirectoryName(openFileDialog1.FileName); //getting the directory 
      string nameOfMyButton = (sender as Button).Name; //you get the name of your button 
      int lastDigitOfMyName = Convert.ToInt16(Name[Name.Length - 1]); //returns the number of your button 
      TextBox neededTextboxToShowDirectory = this.Controls.Find("textbox" + lastDigitOfMyName, true).FirstOrDefault() as TextBox; //this will search for a control with the name "textbox1" 
      neededTextboxToShowDirectory.Text = fileDirectory; //you display the text 
      //... doing the rest of your stuff here 
     } 
    } 
+0

しかし、もし私がこれを好きなら、拡張子が.fdbでなければ私はイベントをキャンセルできません – Pacijent

+0

あなたはいつもあなたのチェックをコードの上に置くことができます。そのような単純なものです。単純な 'return'を使うだけで、最初のチェックが完全に行われていない場合、コードがさらに実行されないようにすることができます。 –

0

あなたは一時的にあなたのTextBoxのテキストを保存プライベートフィールドを使用して、このようなクリックイベントでそれを展開できます。その後、whichButtonを選択する

private int whichButton = 0; 

private void button1_Click(object sender, EventArgs e) 
{ 
    whichButton = 1; 
    openFileDialog1.ShowDialog(); 
} 


private void button2_Click(object sender, EventArgs e) 
{ 
    whichButton = 2; 
    openFileDialog1.ShowDialog(); 
} 


private void button3_Click(object sender, EventArgs e) 
{ 
    whichButton = 3; 
    openFileDialog1.ShowDialog(); 
} 

使用

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) 
{ 
    switch (whichButton) 
    { 
     .... 
    } 


} 
+0

それは私が念頭に置いた解決策の一つですが、私はそれを行うより効率的な方法があると思ったグローバル変数を宣言する代わりに。とにかくありがとう。 – Pacijent

+0

@Pacijent私は確信しています。ちょっと遅かったです。あなたはまだ見ているかもしれません。 –

+0

私はちょうどあなたの質問を再度読んで、私の解決策はかなり正しいようには思わない。結果の値を 'OpenFileDialog'からそれぞれの' TextBoxes'に渡す必要はありませんか? –

関連する問題