如何停止在 formclosing 事件中将值从一种形式传递到另一种形式?

How to stop passing value from one form to other in formclosing event?

我有 2 个表格(form1、form2)。我可以将值从 form2 传递到 form1,但主要问题是,当我关闭 form2 时,他无论如何都会传递值,所以我在 form1 中得到空值。 例如:我将 2000 欧元的值添加到 form 1 文本框和标签中,然后当我再次打开 form2 时,保持 texbox 清除和 radiobutt 未选中,然后使用红色 X 关闭按钮关闭 form2,form1 的值2000 欧元将消失。 这是传递值和按钮的源代码:

FORM2

private string pss;
public string Passvalue
{  

    get { return pss; }
    set { pss = value; }
}
private string pss2;  
public string Passvalue2
{
    get { return pss2; }
    set { pss2 = value; }
}

public void Btn1_Click(object sender, EventArgs e)//The passvalue button
{
    string eur="EUR";
    Passvalue = ukupnaCifraTB.Text;//textbox form2=the number sender
    ukupnaCifraTB.Text = String.Empty;



    if (radioButton1.Checked)
    {
        radioButton1.Text = eur;
        Passvalue2 = radioButton2.Text;
    }

    this.Close();
}

这是表格 1:

private string backvalue;
public string BackedValue
{
    get { return backvalue; }
    set { backvalue = value; }           
}

private string backedText;
public string BackedText
{
    get { return backedText; }
    set { backedText =  value; }
}

public void Btn1_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(); 
    f2.ShowDialog();
    trenutnoStanjeTB.Text = f2.Passvalue;//trenutnostanjeTB=textbox(form1)=gets number from form2
    DinEuLab1.Text = f2.Passvalue2;//dineulab1=label form1=gets the eur text
    DinEuLab2.Text = f2.Passvalue2;

}

我需要 change/add 什么来解决我的问题? 我希望当我传递值后打开 form2 并关闭它时,不要将空值发送到 form1。

首先,你的问题是不可读的,而且到处都是。其次,您似乎没有尝试验证这些值,或者至少没有向我们展示您为解决问题所做的努力。您可以轻松尝试以下方法之一

  1. 如果您希望 Form2 在值为空时停止

    if (Passvalue2.Trim().Length <= 0)    
    {       
        MessageBox.Show("There is no Value");
        return;
    }
    
  2. 如果您想在检测到空白时提供默认值并继续该过程,您可以执行以下操作

    Passvalue2 = radioButton2.Text.Trim().Length > 0 ? radioButton2.Text.Trim() : "SOME DEFAULT VALUE";
    

编辑

  1. 您也可以按如下方式更改 From1 Btn1_Click 事件

    public void Btn1_Click(object sender, EventArgs e)
    
    {
        Form2 f2 = new Form2(); 
        f2.ShowDialog();
        if ((f2.Passvalue.Length > 0) && (f2.Passvalue2.Length > 0))
        {
            trenutnoStanjeTB.Text = f2.Passvalue;//trenutnostanjeTB=textbox(form1)=gets number from form2
            DinEuLab1.Text = f2.Passvalue2;//dineulab1=label form1=gets the eur text
            DinEuLab2.Text = f2.Passvalue2;
        }
    
    }
    

如果您想单独检查 Passvalue 和 Passvalu2,只需拆分 if 语句中的条件即可。在这里,我假设您希望两个值在分配之前都具有某些内容。

一个简单的空值查询就可以解决您的问题。在关闭 Form2 并尝试将 Passvalues 分配给 Form1Textboxes 时,只需检查 f2.Passvalue 和 [=15] 中是否存在有效值=].如果不为空赋值,否则保留旧值

trenutnoStanjeTB.Text = !String.IsNullOrWhiteSpace(f2.Passvalue) ? f2.Passvalue : trenutnoStanjeTB.Text;

DinEuLab1.Text = !String.IsNullOrWhiteSpace(f2.Passvalue2) ? f2.Passvalue2 : DinEuLab1.Text;

等等