首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个小的草案求解(关于多窗口同时编辑)

2012-11-11 
一个小的方案求解(关于多窗口同时编辑)一个数据列表,每行数据有一唯一标识ID,点击一行可进入修改界面(frm_

一个小的方案求解(关于多窗口同时编辑)
一个数据列表,每行数据有一唯一标识ID,点击一行可进入修改界面(frm_Edit),
现在需要可以同时打开多编辑界面,以标识ID来过滤相关详细内容。
现在项目设计的情况如下:
所有的界面Form继承自一个baseForm.
如何最简洁的完成这个功能?

我的部分实现:
ImspGlobal.listFormID 为全局List<string>

C# code
        //没有则初始化返回一个编辑框,有则直接返回存在的编辑框        public static Frm_base OpenSomeForm<T>(object[] parameters) where T : Frm_base        {            Frm_base openForm = null;            object obj = parameters.Count() > 0 ? parameters[parameters.Count() - 1] : null;            if (!ImspGlobal.listFormID.Contains(obj.ToString()))            {                openForm=(T)Activator.CreateInstance(typeof(T), parameters);            }            else             {                foreach (Form form in Application.OpenForms)                {                    if(form is T)                    {                        var data = form as T;                        if (data.FormCode == obj.ToString())                            openForm = data;                    }                }            }            return openForm;        }


界面上部分代码:
C# code
        //存在直接获取焦点,不存在,添加其编号入集合并打开显示listFormID为Frm_base的附加属性        private void btnShow_Click(object sender, EventArgs e)        {            var frmEdit = (Frm_Edit)ImspPubFun.OpenSomeForm<Frm_Edit>(new object[] { orderId, null, "06001" + (orderId).ToString() });            if (!ImspGlobal.listFormID.Contains("06001" + (orderId).ToString()))            {                ImspGlobal.listFormID.Add("06001" + (orderId).ToString());                frmEdit .OnFormClosed += new EventHandler<CloseFormArgs>(frm_OnFormClosed);                frmEdit .Show();            }            else            {                frmEdit .Activate();            }        }

我觉得自己想法有些乱,功能可以实现,但这样的界面很多,修改地方也多,特别是那个关闭frmEdit刷新问题,我注册了个事件来处理,那很多编辑界面都要加,有更简洁的方法吗?

[解决办法]
不建议继承,而应该使用用户控件。
[解决办法]
问题搞得很复杂噢,表示鸭梨很大...
能否先描述需求,然后再貼代码
感觉你的设计比较凌乱...
[解决办法]
C# code
        private void MainForm_Load(object sender, EventArgs e)        {            listBox1.Items.AddRange(new String[] { "1", "2", "a", "b" });        }        private void listBox1_DoubleClick(object sender, EventArgs e)        {            String strName = listBox1.Text;            if (!String.IsNullOrEmpty(strName))            {                Boolean bOpen = false;                foreach (Form f in Application.OpenForms)                {                    if (f.Name == strName)                    {                        bOpen = true;                        f.BringToFront();                        break;                    }                }                if (!bOpen)                {                    Form f = new Form();                    f.Name = strName;                    f.Text = strName;                    f.Show();                }            }        }
[解决办法]
给个思路:
1、编辑窗体需要增加一个属性DataID,用于标识数据的唯一值;
2、当父窗体需要编辑时,判断打开的编辑窗体有无DataID相同的,若有,将其激活,否则。创建编辑窗体,赋值,包括刷新父窗体的回调;
3、在父窗体中定义回调函数原型,刷新回调函数传回的DataID值那行的数据;

我觉得每个列表界面只需要2个窗体就可以了,一个父窗体,一个编辑窗体。

热点排行