将值传递给处理程序

本文关键字:处理 程序 值传 | 更新日期: 2023-09-27 17:52:50

我有这样的代码:

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目录到不同的文本框。逻辑是这样的:

如果我打开与button1,传递值给textbox1,如果我打开button2,传递值给textbox2,如果我打开button3,传递值给textbox3。

所以我想创建int check(1,2,3),所以当我按下button1时,它传递check = 1给OpenDialog1_FileOk,所以我只是切换那里并做动作。

问题是我不知道如何传递它的处理程序,如果这是可能的。如果有其他的解决方案,请写下来。

将值传递给处理程序

首先,您可以像这样使用openfiledialog,而不需要为它处理一个全新的函数:

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

第二,为了实现你的目标,你必须确保你的控件的名称正好以你想要的数字结尾(例如:"button1"answers"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
        }
    }

您可以使用一个私有字段来临时保存TextBox的文本,并将其部署在单击事件中,如下所示:

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();
}

使用whichButton选择

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

}