2011-03-25 60 views
0

嗨,我想简化我的CRUD按钮在我的基础形式。为此,我会认为将所有这些转换为自定义控件是最佳实践。简化crud按钮

我提到了Rocket框架,这就是他写的如下。他创建了一个自定义控件,其中包含CRUD按钮以及搜索按钮,并且loadAll按钮在同一行中对齐。然后,当我们需要某个特定的按钮时,我们可以像获取网站图像那样获取该按钮的位置,以便将所有图像变为1图像。这听起来不错。

问题:
1)如何将这个自定义控件按钮应用到我的GUI窗体?
2)如何简化我的CRUD按钮的确认消息和提示结果消息给用户?在save()事件后按下保存按钮和"This record is saved successfully/failed",我觉得在我所有的crud按钮上多次写"Are you sure to save/ delete"是多余的。无论如何,我可以通过将其放到基于表单的CRUD自定义控件来简化此操作?例如,当用户按下保存按钮时,它将运行基于表单的确认消息,并且它将继续运行数据模型上的Save()事件并返回到基础表单以获得结果消息“成功保存”。

public partial class AdminController : UserControl 
{ 
    public event EventHandler AddUpdateClick; 
    public event EventHandler DeleteClick; 
    public event EventHandler CreateNewClick; 
    public event EventHandler RefreshClick; 
    public event EventHandler FilterClick; 
    public event EventHandler LoadAllClick; 
    public AdminController() 
    { 
     InitializeComponent(); 
    } 

    private void buttonDelete_Click(object sender, EventArgs e) 
    { 
     if (DeleteClick != null) 
      DeleteClick(sender, e); 
    } 

    private void buttonAddUpdate_Click(object sender, EventArgs e) 
    { 
     if (AddUpdateClick != null) 
      AddUpdateClick(sender, e); 
    } 

    private void buttonCreateNew_Click(object sender, EventArgs e) 
    { 
     if (CreateNewClick != null) 
      CreateNewClick(sender, e); 
    } 

    private void buttonLoadAll_Click(object sender, EventArgs e) 
    { 
     if (LoadAllClick != null) 
      LoadAllClick(sender, e); 
    } 

    private void buttonFilter_Click(object sender, EventArgs e) 
    { 
     if (FilterClick != null) 
      FilterClick(sender, e); 
    } 

    private void buttonRefresh_Click(object sender, EventArgs e) 
    { 
     if (RefreshClick != null) 
      RefreshClick(sender, e); 
    } 
} 

请指点

回答

1

1)一旦编译用户控件将可从工具箱。查看工具箱最上面的组。

2)以下代码调用,如果它已经迷上了AdminController的DeleteClick事件:

if (DeleteClick != null) 
    { 
     if (MessageBox.Show("Are you sure to save?", "Please Confirm", MessageBoxButtons.OKCancel) == DialogResult.OK) 
     { 
      DeleteClick(sender, e); 
     } 
    } 

if (DeleteClick != null) 
    DeleteClick(sender, e); 

要调用删除事件考虑改变上面的代码之前实施的确认消息

要实现成功/失败消息,挂钩事件的委托将通过传回布尔值让AdminController知道更新是否成功。如下

public partial class AdminController : UserControl 
{ 
    public delegate void AdminControllerEvent(object sender, AdminControllerEventArgs e); 

    public event AdminControllerEvent AddUpdateClick; 
    public event AdminControllerEvent DeleteClick; 

那么成功的价值,可以测试:这可以使用自定义EventArgs类

public class AdminControllerEventArgs : EventArgs 
{ 
    public bool Success; 

    public AdminControllerEventArgs() : base() 
    { 
     Success = true; 
    } 
} 

和改变事件的声明中AdminController使用AdminControllerEventArgs被achived

AdminControllerEventArgs e = new AdminControllerEventArgs(); 

    if (DeleteClick != null) 
    { 
     if (MessageBox.Show("Are you sure to save?", "Please Confirm", MessageBoxButtons.OKCancel) == DialogResult.OK) 
     { 
      DeleteClick(sender, e); 

      if (adminControllerEventArgs.Success) 
      { 
       MessageBox.Show("This record is saved successfully."); 
      } 
      else 
      { 
       MessageBox.Show("This record is saved failed."); 
      } 
     } 
    } 

当数据库更新失败时,挂钩新事件的委托人需要设置e.Success = false

+0

嗨,对不起,迟交回复。我试过你的代码,但是'if(adminControllerEventArgs.Success)'没有成功。我更改为公共静态布尔成功;它的工作原理。至于你在'e.Success = false'上说了什么,你是否意味着我必须把它放到它返回的每个函数都失败了? – VeecoTech 2011-04-19 07:53:42

+0

嗨,我不能够建立后,我添加了你的代码。 DeleteClick(sender,e);'有一些无效的争论。我认为这是由于'公共委托void AdminControllerEvent(object sender,AdminControllerEventArgs e); “你能帮忙吗? – VeecoTech 2011-04-22 05:51:16

+0

我试图改变私人无效btnDelete_Click(对象发件人,EventArgs e)成为'私人无效btnDelete_Click(对象发件人,AdminControllerEventArgs e)',但这给'错误上this.btnDelete.Click + =新的System.EventHandler(这个。btnDelete_Click);'“错误没有重载‘btnDelete_Click’匹配委托‘System.EventHandler’” – VeecoTech 2011-04-22 05:54:29