2012-05-02 125 views
0

我有2個構造函數在我的課:C#WinForm的事件處理程序

public partial class Fiche_Ordre : Le_MainForm 
    { 
     public Fiche_Ordre() 
       { 
        InitializeComponent();   
        Constuct_Page();    
       } 

       public Fiche_Ordre(string OrderID): this() 
       { 


        Pers_Ordre oPersOrdr = oOrder_BL.Get_OrdreOne_BL(ClientID, Convert.ToInt32(OrderID), false); 

       textEdit_RefExpred.Text = oPersOrdr.RefExpd; 
       lookUpEdit_Agence.EditValue = oPersOrdr.Agence; 
       lookUpEdit_Transport.EditValue = oPersOrdr.Transporteur; 

       lookUpEdit_Dest.EditValue = oPersOrdr.DestId; 
    .................. 

       } 


       public void Constuct_Page() 
       { 
        try 
        { 
         ClientID = Program.Le_ClientID; 
         .... 

       #region LookUpEdidt Destinataire 

        lookUpEdit_Dest.Properties.DataSource = Auxiliaire_BL.FillCombo_BL(false, ClientID).Tables["ComboFill"]; 
        lookUpEdit_Dest.Properties.ValueMember = "CODE_DEST"; 
        lookUpEdit_Dest.Properties.DisplayMember = "CODE_DEST"; 
        LookUpColumnInfoCollection coll_Dest = lookUpEdit_Dest.Properties.Columns; 
        // A column to display the ProductID field's values. 
        coll_Dest.Add(new LookUpColumnInfo("CODE_DEST", 0, "Code Destinataire")); 
        // A column to display the ProductName field's values. 
        coll_Dest.Add(new LookUpColumnInfo("RS_NOM", 0, "Raison Social")); 
        // Set column widths according to their contents and resize the popup, if required. 
        lookUpEdit_Dest.Properties.BestFitMode = BestFitMode.BestFitResizePopup; 
        // Enable auto completion search mode. 
        lookUpEdit_Dest.Properties.SearchMode = SearchMode.AutoComplete; 
        // Specify the column against which to perform the search. 
        lookUpEdit_Dest.Properties.AutoSearchColumnIndex = 1; 
        lookUpEdit_Dest.EditValueChanged += new EventHandler(lookUpEdit_Dest_EditValueChanged); 
       #endregion 
     ... 
     } 

很奇怪,因爲當我使用public Fiche_Ordre()它不火new EventHandler(lookUpEdit_Dest_EditValueChanged);;但是當我使用public Fiche_Ordre(string OrderID)時,它會觸發事件處理程序。

這是正常與否?

第一constuctor它的主要形式

public partial class Le_MainForm : DevExpress.XtraEditors.XtraForm 
    { 
     public Le_MainForm() 
     { 
      InitializeComponent(); 

      this.Name = "MainUSER"; 

      if (Program.IsFA) barButtonItem_OrdList.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; 


     } 

private void barButtonItem_CreatOrdreAller_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) 
     { 
      Close_AllForm(); 
      Program.AllerRetour = "Ordre Aller"; 
      Fiche_Ordre f_Fiche = new Fiche_Ordre(); 

      f_Fiche.Show(); 
     } 

呼叫和第二構造我把它從

public partial class Liste_Ordres : Le_MainForm 
    { 

    private void Liste_DobleClic(object sender, EventArgs e) 
      { 
       try 
       { 
        Program.OrderId = gridView_Liste_Ordres.GetFocusedRowCellValue("NO_ORDRE").ToString(); 
        this.Hide(); 
        Fiche_Ordre f_Fiche = new Fiche_Ordre(gridView_Liste_Ordres.GetFocusedRowCellValue("NO_ORDRE").ToString()); 
        f_Fiche.Show(); 
       } 
       catch (Exception excThrown) 
       { 
        MessageBox.Show(excThrown.Message); 
       } 
      } 

預先感謝您。 PS:第一個構造函數只是創建NEW空白頁,第二個構造函數是創建NOT NEW(編輯頁面),所以我傳遞了id並填充了所有控件(文本框,備忘錄等等)。 )

+0

你在第二個構造函數中使用了OrderID? – McGarnagle

+1

@dbaseman這是如何幫助你解決問題的? – Likurg

+0

@Likurg,因爲這是兩個構造函數之間的唯一區別,我認爲它可能是相關的,呃? – McGarnagle

回答

1

EditValueChanged手柄在最後一行Constuct_Page中連線。因此它僅在Constuct_Page之後發生變化。它是否在..................部分代碼中發生了變化?這聽起來像一個過於簡單化的猜測,但它是值得仔細檢查反正...

此外,我可以建議你另外一個改進:

public Fiche_Ordre(string OrderID) : this.Fiche_Ordre() 
{ 
    // invokes the other constructor first, so they're guaranteed 
    // do be equivalent in the first part 

    Pers_Ordre oPersOrdr = oOrder_BL.Get_OrdreOne_BL(ClientID, 
    Convert.ToInt32(OrderID), false); 

    // ... 
} 
0

認沽斷點,當你想在看lookUpEdit_Dest綁定事件處理程序,我認爲這個var不會初始化,所以你需要添加從第二個構造函數初始化到第一個。

0

改爲創建Constuct_Page();只需放入Form_Load()