C#无法从对话框中更改标签和按钮属性

时间:2015-09-28 06:00:21

标签: c# winforms

我有一个主窗体和一个从main调用的对话框。在我的主要表单中,我有一个标签和一个按钮,我无法改变这些属性。我使用的是Visual Studio 2015,不确定是否存在此问题。我还确保我的标签和按钮设置为公开修改。

代码:(这是从对话框中,这个列表框中的函数是在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下方的代码运作良好,但不是顶级代码。 我已经使用调试模式来检查是否没有跳过这些行并且它们不是。

4 个答案:

答案 0 :(得分:2)

你应该注意:

  • 您正在创建一个您不需要的主表单的新实例(当它在对话框后面打开时),因此您需要让它不创建新实例

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

实际上,您正在创建一个新的主窗体实例,并为这些控件赋值,然后将其处理掉。虽然你期望看到它的主要形式的实例和实例在你的对话框后面是开放的和未受影响的。

要设置这些控件的值,您可以采用以下方法之一:

选项1

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

//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

关闭对话框后,使用对话框中的值并设置主窗体的值

答案 1 :(得分:1)

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

            var _currentMainForm= Application.OpenForms[0];

或者如果您已为表单命名

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

获得参考后,您可以执行所有标签更新。

答案 2 :(得分:0)

顶部的代码创建一个新表单,更改标签然后处理表单。 我认为你应该改变现有表格的标签。

答案 3 :(得分:0)

与其他答案中的说法一样,您将控件的属性设置为新的Form对象,而不是您来自的形式。 您应该将表单对象传递给对话框的参数,例如:

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

并从您这样的主要表单中调用它

...
myDialog(this);