gpt4 book ai didi

c# - 我如何在 winforms 中制作我的自定义对话框?

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:33 24 4
gpt4 key购买 nike

我一直坚持一个糟糕的设计。

我想创建一个自定义单元格选择对话框(用户从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com