2015-09-28 25 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);