2015-09-28 26 views
0

我有我的主窗体和从main调用的对话框。在我的主要形式中,我有一个标签和一个按钮,哪些属性我无法更改。我正在使用Visual Studio 2015,不确定是否有关于此的错误。我还确保我的标签和按钮已设置为公开进行修改。C#无法更改对话框中的标签和按钮属性

码:(这是在对话框中,这有一个列表框的功能在selectindexchange被触发)

else if ((short)lbDiscountTypes.SelectedValue == 2) //Senior 
       { 
        frm_Main main = new frm_Main(); 
        main.VAT = false; 
        main.labelStatus.Text = "NON-VAT (SENIOR)"; 
        main.labelStatus.BackColor = System.Drawing.Color.IndianRed; 
        main.labelStatus.ForeColor = System.Drawing.Color.WhiteSmoke; 
        main.btnNonVat.Enabled = false; 
        main.btnNonVat.BackColor = System.Drawing.Color.SlateGray; 
        main.btnNonVat.ForeColor = System.Drawing.Color.Navy; 
        main.labelVatAmount.Text = 0.00m.ToString(); 
        main.Dispose(); 

        //INQUIRE DISCOUNT TYPES 
        var Discount = GC.CSHR_DiscountTypes.Where(Filter => Filter.DiscountCode == (short)lbDiscountTypes.SelectedValue); 
        decimal DP = 0.00m; 
        foreach (var item in Discount) 
        { 
         DP = item.DiscountPercentage; 
        } 

        foreach (var item in GC.CSHR_SORepo 
             .Where(Filter => Filter.Machine == MACHINE 
              && Filter.SalesOrderNum == SALESORDERNUM 
              && Filter.First_SRP == Filter.IMFSRP)) 
        { 
         item.DiscountAmount = (item.SoldSRP * DP)/100; 
         item.TotalAmount = (item.Quantity * item.SoldSRP) - item.DiscountAmount; 
         item.VATableSalesOnTotalAmount = (item.Quantity * item.SoldSRP) - item.DiscountAmount; 
         item.VATRate = 0.00m; 
         GC.SaveChanges(); 
        } 

        Close(); 
       } 

下面//INQUIRE DISCOUNT TYPES作品的代码很好,但不是在顶部的一个。 我已经使用调试模式来检查行是否被跳过,而他们不是。

+0

第一 - 你正在创建你的主要的新实例形式,你不需要(当它在对话框后面打开时)second-labelStatus和btnNonVat受保护并且应该公开 –

+0

labelStatus和btnNonVat设置为public。 “我也确保我的标签和按钮已经公开进行修改。” –

+0

你是否正在使用'frm_Main main = new frm_Main();'然后处置它! –

回答

2

你要注意:

  • 你正在创建主窗体的新实例,你并不需要(虽然它是对话框后面开),所以你需要得到它不创建一个新实例

  • 您正在处理您创建的主窗体。 main.Dispose();

其实你正在创建主窗体的新实例,并以这些控件分配值,然后丢弃它。虽然您希望看到其中的更改的主要形式的实例在对话框后面是开放的,并且未触及。

设置这些你能做到这些的方法之一控件值:

选项1

让您labelStatus和btnNonVat公众。在设计器中打开主窗体并选择labelStatus和btnNonVat,然后在属性网格中将Modifier设置为公开。然后写这样的代码:

//var main = Application.OpenForms.OfType<frm_Main>().FirstOrDefault(); 
var main = (frm_Main)Application.OpenForms["frm_Main"]; 
main.labelStatus.Text = "NON-VAT (SENIOR)"; 
main.labelStatus.BackColor = System.Drawing.Color.IndianRed; 
main.labelStatus.ForeColor = System.Drawing.Color.WhiteSmoke; 
main.btnNonVat.Enabled = false; 
main.btnNonVat.BackColor = System.Drawing.Color.SlateGray; 
main.btnNonVat.ForeColor = System.Drawing.Color.Navy; 
main.labelVatAmount.Text = 0.00m.ToString(); 

选项2

通过你frm_Main的实例到您的对话框,并使用它。

选项3

从主窗体

+0

他们在公开场合。我已经提到过。 –

+0

非常感谢。 –

+0

@JoshuaMasangcay不客气:) –

0

在上面的代码创建一个新形式的对话和设定值关闭对话框,利用价值后,改变了标签,然后部署形式。 我认为你应该改变现有表格的标签。

1

看起来您正尝试使用frm_Main main = new frm_Main();语法创建新表单。你所需要做的就是获取当前表单的实例。

  var _currentMainForm= Application.OpenForms[0]; 

,或者如果你给的名字到窗体

  var _currentMainForm = Application.OpenForms["MainFormName"]; 

一旦你就可以执行所有的标签更新的参考。

0

像在其他答案一样,你说的是将控件的属性设置成一个新的Form对象,而不是你来自的表单。 您应该通过表单对象到对话框的参数,是这样的:

void myDialog(frm_Main callingForm) 
{ 
    callingForm.Textbox1.Text = "abc"; 
} 

而且从你怎么称呼它主要形式是这样

... 
myDialog(this);