2012-03-19 4 views
0

hi программисты, На самом деле у меня есть 3 формы, т. Е. Mdiparent form, mdichild и usercontrol. Форма usercontrol имеет treeview. Поэтому мне нужно обновить usercontrol из mdichildform. Я создаю экземпляр usercontrol и запускаю событие для обновления, но этого не происходит. Какие-либо предложения.Как обновить Usercontrol из другой формы в winforms?

   My UserControl code goes like this: 

      public partial class cHumanResource : UserControl 
       { 
    Human_Resource_Utility human_Record = new Human_Resource_Utility(); 
    MyConnection mc = new MyConnection(); 

    TreeNode tn = new TreeNode(); 
    TreeNode tn_dept = new TreeNode(); 

    List<TreeItemInfo> treeViewList = new List<TreeItemInfo>(); 

    private string LoginUser; 
    private List<FeaturesInfo> UserSettings = new List<FeaturesInfo>(); 

    public cHumanResource() 
    { 
     InitializeComponent();   


    } 
public void LoadEmpDetail() 
    { 
     tstriptxtSearch.Text = ""; 
     EmployeeSearch(""); 
     TreeLoad.CollapseAll(); 
     Application.DoEvents(); 
    } 
    } 

И код frmchild как:

public partial class frmEmployeeInfo : Form,IChildFormInterface 
{ 

    MyConnection mc = new MyConnection(); 

    private bool _sect = false; 

    string curentrymode="ENTRYDEFAULTMODE"; 

    public void CommandPass(string key, FeaturesInfo FinalSetting) 
    { 

     IMdiFormInterface mdiForm = (IMdiFormInterface) this.MdiParent; 
     IHRM mdihrm; 

     switch (key) 
     { 
      case "NEW": 
       curentrymode = "ENTRYNEWMODE"; 

       if (CreateNew()) 
       { 
        mdiForm.CreateActionButtons(curentrymode,FinalSetting); 



       } 
       break; 
      case "SAVE": 
       curentrymode = "ENTRYDEFAULTMODE"; 

       if (SaveBasicInfo()) 
       { 
        mdiForm.CreateActionButtons(curentrymode,FinalSetting); 


        Application.DoEvents(); 
       } 
       break; 
      case "EDIT": 
       curentrymode = "ENTRYEDITMODE"; 
       if (EditBasicInfo()) 
       { 
        mdiForm.CreateActionButtons(curentrymode,FinalSetting); 
       } 
       break; 
      case "CANCEL": 
       curentrymode = "ENTRYDEFAULTMODE"; 
       mdiForm.CreateActionButtons(curentrymode,FinalSetting); 
       CancelBasicInfo(); 
       break; 

      case "REFRESH": 
       Refresh_Form(); 
       break; 

      case "CLOSE": 
       curentrymode = "ENTRYDEFAULTMODE"; 
       mdiForm.CreateActionButtons(curentrymode,FinalSetting); 

       this.Close(); 
       this.Dispose(); 
       break; 

      default: 
       MessageBox.Show("Other Button Clicked"); 
       break; 
     } 
    } 

И frmMAin как

public interface IMdiFormInterface 
{ 
    void RemoveActionBar(); 
    void CreateActionButtons(string mode,FeaturesInfo SETTINGS); 
    void ToggleExplorerBar(); 
    void ToggleExplorerBar(bool Visibility); 
} 

public interface IChildFormInterface { void CommandPass(string key,FeaturesInfo Settings);} 



public partial class frmAttnMain : Form, IMdiFormInterface 
{ 
    Attendance.SystemLogin syslogin = new SystemLogin(); 
    Utility_Mode.FileHandlingUtility fileHandling = new Attendance.Utility_Mode.FileHandlingUtility(); 
    string seltext = "100%"; 
    string selgototxt = "1"; 
    private static string CurUser=string.Empty; 
    private List<FeaturesInfo> menuname =null; 
    private int totalpage = 0; 
    FeaturesInfo Fmodel = new FeaturesInfo(); 
    private static frmAttnMain aForm = null; 
    private static List<FeaturesInfo> aFavmodel; 
    public static frmAttnMain Instance(string usercode,List<FeaturesInfo> fmodel,string Action) 
    { 
     aFavmodel = fmodel; 
     // aForm.loadDatabase(); 
    CurUser = usercode; 
} 
+0

Вы можете разместить некоторые примеры кода, что вы до сих пор? – aleroot

+0

Вы создаете новый экземпляр пользовательского элемента управления для дерева рефешей, который никогда не будет работать, используйте тот же экземпляр пользовательского элемента управления, который вы добавили в форму mdiChild для реферирования: D – BreakHead

ответ

0

Как долго у вас есть ссылки на вложенные объекты, которые позволяют «перемещаться» через них могут получить доступ к их поведению (в вашем случае обновите элемент управления). вам не нужно создавать новый экземпляр пользовательского элемента управления, иначе вы обновите Treeview нового элемента управления, который вы только что создали, а не тот, который находится в форме.

В общем вам нужно сделать что-то вроде

ParentForm.ChildForm.RefreshUserControl() (который может быть открытым способом, что обновления управления на ChildForm, используя ссылку на эту форму)