xenogear

当知道了某样知识之后,就会发现其实什么都不知道

资源管理的麻烦

做一个类似VSS资源管理的功能,却遇到了麻烦。

这些资源的界面表现形式是五花八门的,界面上什么元素都可能有,还可能弹出另外的对话框显示内容。
就是为了防止用户在没有签出状态下修改内容,最直接的办法是直接对每个控件注册内容改变的事件响应,像vs.net那样,只要修改,如果没有签出,强制让签出,否则不让修改。问题是这样做很麻烦。

于是后来想了一个方法,就是不管用户是否修改,只是不允许保存,只有签出后,才允许保存。这样处理是简单,但是还是有问题,虽然我加上了很多提示,告诉用户这种状态下修改的内容不可以保存,并且给了当编辑后再签出时是否保留已改动内容的选择。这样还偶尔会遇到那些根本你给什么提示都不看的用户(大部分都是这样:()。

于是,我又想,我又一个公用的方法,如果没有签出,直接将所有可编辑的控件disable,比如
  public static void DisableControls(Control control)
  {
   for(int i = 0; i < control.Controls.Count; i++)
   {
    Control c = control.Controls[i];
    if(c.Controls.Count > 0)
     TestNavigator.Common.DiableAllEditableControls.DisableControls(c);

    if(c.GetType() == typeof(TextBox))
     c.Enabled = false;
    else if(c.GetType() == typeof(ComboBox))
     c.Enabled = false;
    else if(c.GetType() == typeof(DataGrid))
     c.Enabled = false;
    else if(c.GetType() == typeof(ListBox))
     c.Enabled = false;
    else if(c.GetType() == typeof(CheckBox))
     c.Enabled = false;
    else if(c.GetType() == typeof(CheckedListBox))
     c.Enabled = false;
    else if(c.GetType() == typeof(Button))
     c.Enabled = false;
   }
可是,还是有问题,这样包括DataGrid等控件内容可能显示不全,还有根据控件内容变化弹出的东西也无法执行。

难道没有办法,只能在用户打开资源时,强制获取最新版本?系统是使用Webservice获取数据库内容的,这样做势必会带来性能上的问题。

忘了说,这些资源内容是做本地缓存的。

posted on 2004-08-09 12:22  什么都不知道  阅读(562)  评论(0编辑  收藏  举报

导航