2014-08-19 5 views
0

Я пытаюсь изменить то, что видно в моем элементе управления пользователя, установив флажки в моей форме (родительской). Я попытался изменить его непосредственно в родительской форме и в функции на стороне ребенка. От debug свойство изменяется, но после вызова свойство, похоже, сбрасывается до значения по умолчанию.Доступ к элементам управления пользователя от родителя

Мой код на материнской стороне

public partial class Program: DevExpress.XtraBars.Ribbon.RibbonForm 
{ 
    public Program() 
    { 
     InitializeComponent(); 
    } 
    public class GlobalVariables 
    { 
     public static string categoryID = "1"; 
     public static string currentPage = "Campus"; 
    } 

    private void ribbonControl1_MouseDown(object sender, MouseEventArgs e) 
    { 
     RibbonControl ribbon = sender as RibbonControl; 
     RibbonHitInfo hitInfo = ribbon.CalcHitInfo(e.Location); 
     if (hitInfo.HitTest == RibbonHitTest.PageHeader) 
     { 
      System.Diagnostics.Debug.WriteLine(hitInfo.Page.Name + ""); 
      pnlPanel.Panel2.Controls.Clear(); 
      if(hitInfo.Page.Name == "Campus") 
      { 
       var Campus = new WindowsFormsApplication1.Campus(); 
       pnlPanel.Panel2.Controls.Add(Campus); 
       GlobalVariables.currentPage = "Campus"; 
      } 
      else if (hitInfo.Page.Name == "Report") 
      { 
       var Report = new WindowsFormsApplication1.Report(); 
       pnlPanel.Panel2.Controls.Add(Report); 
       GlobalVariables.currentPage = "Report"; 
      } 
      else if (hitInfo.Page.Name == "Admin") 
      { 
       var Admin = new WindowsFormsApplication1.Admin(); 
       pnlPanel.Panel2.Controls.Add(Admin); 
       GlobalVariables.currentPage = "Admin"; 
      } 

     } 
    } 

    private void Program_Load(object sender, EventArgs e) 
    { 
     var Campus = new WindowsFormsApplication1.Campus(); 
     pnlPanel.Panel2.Controls.Add(Campus); 

     List<string> Category = GenerateCategory(); 

     for(int j = 0; j<= Category.Count(); j++) 
     { 
      krpList.Items.Add(Category[j + 1]); 
      krpValue.Items.Add(Category[j]); 
      j++; 
     } 
    } 

public void krpList_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      int selectedIndex = krpList.SelectedIndex; 
      krpValue.SelectedIndex = selectedIndex; 
      GlobalVariables.categoryID = krpValue.SelectedItem + ""; 
      System.Diagnostics.Debug.WriteLine(krpValue.SelectedItem); 
      Reset(); 
     } 

     public void Reset() 
     { 
      var Campus = new WindowsFormsApplication1.Campus(); 
      pnlPanel.Panel2.Controls.Clear(); 
      pnlPanel.Panel2.Controls.Add(Campus); 
     } 

     private void chkDisplay_EditValueChanged(object sender, EventArgs e) 
     { 
      string displayInfo = ""; 
      var Campus = new WindowsFormsApplication1.Campus(); 
      displayInfo = chkDisplay.Text; 
      Campus.UpdateAudit(displayInfo); 
      Campus.treeList1.ClearNodes(); 
     } 


    } 
} 

кода управления пользователя

public void UpdateAudit(string displayInfo) //Child Method 
{ 
    treeList1.ClearNodes(); //Adjusting property on user control element 
    treeList1.Columns[1].VisibleIndex = 1; 
    treeList1.Columns[2].VisibleIndex = 2; 
    //...more code similar to above 
} 

Любая помощь будет оценена.

+0

Что я подозреваю, форма, которую вы показываете, и форма, которую вы используете, - это два разных экземпляра. Можете ли вы добавить полный код, где вы пишете var Campus = new WindowsFormsApplication1.Campus(); .... Я думаю, что это должен быть какой-то обработчик событий. – Rabi

+0

@Rabi Пожалуйста, найдите полный код по запросу – Nathan

ответ

1

ну, вот в чем проблема, вы используете несколько экземпляров одной и той же формы. вы должны создать один экземпляр и использовать его.

public partial class Program: DevExpress.XtraBars.Ribbon.RibbonForm { 

UserControl Campus = null; 

public Program() 
    { 
     InitializeComponent(); 
     Campus = new WindowsFormsApplication1.Campus(); 
    } 

private void Program_Load(object sender, EventArgs e) { 
    // remove this object creation 
//var Campus = new WindowsFormsApplication1.Campus(); 

     pnlPanel.Panel2.Controls.Add(Campus); 
    ... 
} 

public void Reset() { 
    // remove this object creation 
// var Campus = new WindowsFormsApplication1.Campus(); 
} 


private void chkDisplay_EditValueChanged(object sender, EventArgs e) { 

string displayInfo = ""; 
    // remove this object creation 
// var Campus = new WindowsFormsApplication1.Campus(); 
} 

private void ribbonControl1_MouseDown(object sender, MouseEventArgs e) 
    { 
    ... 
    if(hitInfo.Page.Name == "Campus") 
      { 
       // remove this object creation 
       //var Campus = new WindowsFormsApplication1.Campus(); 

    } 
    ... 
} 
} 
+0

Я не полностью следую этому предложению. Переменная типа var на уровне класса, даже не объявленная как общедоступная, не будет работать. Не могли бы вы рассказать о том, как должно работать ваше предложение? – Nathan

+0

Вы также удалили создание объекта здесь: if (hitInfo.Page.Name == "Campus") {var Campus = new WindowsFormsApplication1.Campus(); – Rabi

+0

Да, я удалил всю ссылку на исходную переменную Campus. Это остановило работу всего кода, поэтому пользовательский элемент управления больше не обновляется, используя этот код. – Nathan

Смежные вопросы