c# - 我如何在winforms中制作我的自定义对话框?
问题描述
我坚持一个糟糕的设计。
我想创建一个自定义单元格选择对话框(用户从 dataGridView 中选择一个单元格,然后按 OK 或 Cancel 按钮),以便我可以得到如下结果:
public string GetFile()
{
DialogResult dialogResult = _open.ShowDialog();
if (dialogResult == DialogResult.OK)
return _open.FileName;
else
return null;
}
这里的关键是,直到出现 dialogresult 才会执行 if 语句。
我开始做的是 - 创建一个新的 Form ChooseFileFromDBForm : Form
,嗯.. 很难弄清楚哪些类应该通知哪些类关于按钮单击(该表单中有一个 gridview 和按钮)等等......
现在我认为这是一个糟糕的设计。我不能告诉你细节,因为它不会向你解释我选择了什么设计,但如果你愿意的话——我最后一次提交“糟糕的设计”在这里:github(ChooseFileFromDBForm.cs,DBFilePicker.cs 文件)
问题是 - 我如何创建自己的 DialogResult 东西 - 以便它等到用户选择一行/单元格(结果表中只有一列)并按下“确定”或“取消”按钮?
解决方案
可能有更好的方法,但你可以......
您可以使用 Windows 窗体创建自己的对话框,并为 DataGridSelectedCellCollection 添加 OK、Cancel 按钮和属性或成员变量。
public partial class CellSelectionDialog : Form
{
public DataGridViewSelectedCellCollection cells { get; set; }
public CellSelectionDialog()
{
InitializeComponent();
}
}
在保存 DataGrid 的表单中将此设置为类变量并将其设置为 null。
CellSelectionDialog csd = null
然后在您的 DataGridView 上订阅 selectionChanged 事件。在事件中检查您的 Dialog 是否为空。如果是,那么您不希望获得该单元格。如果不为空,则设置该值
if (csd != null)
{
csd.cells = dgvGrid.SelectedCells;
csd.BringToFront();
}
添加一个事件处理程序以使用 DataGridView 处理表单上的表单关闭
private void CellSelectionDialog_FormClosing(object sender, FormClosingEventArgs e)
{
if (csd.DialogResult == DialogResult.OK)
{
//Do something with csd.cells
MessageBox.Show(csd.cells[0].Value.ToString());
//set the form to null;
csd = null
}
}
您可以将对话框称为
csd = new CellSelectionDialog();
csd.FormClosing += CellSelectionDialog_FormClosing;
csd.Show();
推荐阅读
- swift - 如何强制使用 vapor swift 建立安全的 websocket 连接?
- r - 使用 Power BI 中的 Office 数据连接 (.odc) 文件连接到 R 中的数据库
- javascript - JS如何检查对象是否具有接口中不包含的属性?
- maven - 属性 maven.compiler.target 是如何工作的
- spring-boot - spring 和 Spark Streaming 一起出现的问题
- node.js - 如何使用 nvm 设置默认 Node.js 版本?
- excel - 搜索文本并复制其后的数据
- c++ - 实施“数字战争”的最优策略
- html - Angular 8过滤器:保留文本区域输入的换行符
- python - 通过 Python 根据 if 条件添加新行