- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直坚持一个糟糕的设计。
我想创建一个自定义单元格选择对话框(用户从 dataGridView 中选择一个单元格,然后按下按钮“确定”或“取消”)以便我可以获得如下结果:
public string GetFile()
{
DialogResult dialogResult = _open.ShowDialog();
if (dialogResult == DialogResult.OK)
return _open.FileName;
else
return null;
}
这里的关键是,if 语句在dialogresult 出现之前不会执行。
我开始做的是 - 创建一个新的表单 ChooseFileFromDBForm : Form
,然后......很难弄清楚哪些类应该通知哪些类关于按钮点击(有一个 gridview 和按钮以那种形式)等...
现在我认为这是一个糟糕的设计。我不能告诉你细节,因为它不会向你解释我选择了什么设计,但如果你愿意 - 这里有我最后一次提交的“糟糕的设计”:github (ChooseFileFromDBForm.cs, DBFilePicker.cs文件)
问题是 - 我如何创建自己的 DialogResult 东西 - 以便它等到用户选择一行/单元格(结果表中只有一列)并按下“确定”或“取消”按钮?
最佳答案
可能有更好的方法,但你可以......
您可以使用 Windows 窗体创建自己的对话框,并为 DataGridSelectedCellCollection 添加确定、取消按钮和属性或成员变量。
public partial class CellSelectionDialog : Form
{
public DataGridViewSelectedCellCollection cells { get; set; }
public CellSelectionDialog()
{
InitializeComponent();
}
}
将其设置为包含 DataGrid 的表单中的类变量,并将其设置为空。
CellSelectionDialog csd = null
然后在您的 DataGridView 上订阅 selectionChanged 事件。在事件中检查您的对话框是否为空。如果是,那么您不希望获得该单元格。如果不为空则设置值
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();
关于c# - 我如何在 winforms 中制作我的自定义对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54580306/
我是一名优秀的程序员,十分优秀!