如何让我的方法在winforms中等待按钮点击事件
How to make my method to wait for button click event in winforms
我有 winForms 项目,我的 button_click 1 是添加到我的文档章节之一的元素中。我想将我的配置保存在配置文件 test.json 中(它是以 JSON 格式编写的)。我正在保存通过选中复选框选择的所有内容。稍后我想加载选中的复选框。但是如何等到 button_click1
事件被点击并且我的复选框会出现。我的加载文件如下所示:
private void SaveConfig(string path)
{
var config = new DocConfig();
config.Parts = new List<DocPart>();
foreach (TreeNode node in treeView1.Nodes)
{
{
config.Parts.Add(new DocPart { NodeTitle = node.Text, NodeChecked = node.Checked });
}
{
foreach (TreeNode child in node.Nodes)
{
config.Parts.Add(new DocPart { ChildTitle = child.Text, ChildChecked = child.Checked });
}
}
var configString = config.SaveToString();
File.WriteAllText(path, configString);
}
}
private void LoadConfig(string path)
{
var cfgString = File.ReadAllText(path);
var cfg = DocConfig.LoadFromString(cfgString);
foreach (var part in cfg.Parts)
{
foreach (TreeNode node in treeView1.Nodes)
{
if (part.NodeTitle == "chap1")
{
node.Checked = part.NodeChecked;
}
if (part.NodeTitle == "chap2")
{
node.Checked = part.NodeChecked;
}
if (part.NodeTitle == "chap3")
{
node.Checked = part.NodeChecked;
}
}
}
}
}
}
删除了 button1_click() 并添加了这个 class
private void Initializetreeview();
treeView1.Nodes.Add(new TreeNode("chapter1") { Tag = @"\include {chapter1}" }); ;
treeView1.Nodes.Add(new TreeNode("chapter2") { Tag = @"\include {chapter2}" });
treeView1.Nodes.Add(new TreeNode("chapter3") { Tag = @"\include {chapter3}" });
treeView1.Nodes[0].Nodes.Add(new TreeNode("section1") { Tag = @"\input {sec1}" });
treeView1.Nodes[1].Nodes.Add(new TreeNode("section2") { Tag = @"\input {sec2}" });
treeView1.Nodes[2].Nodes.Add(new TreeNode("section3") { Tag = @"\input {sec3}" });
正在从添加的列表中删除 button2_Click:
private void button2_Click(object sender, EventArgs e)
{
RemoveChecked(treeView1.Nodes);
}
void RemoveChecked(TreeNodeCollection nodes)
{
foreach (TreeNode checkedNode in FindCheckedNodes(nodes))
{
nodes.Remove(checkedNode);
}
}
private List<TreeNode> FindCheckedNodes(TreeNodeCollection nodes)
{
List<TreeNode> checkedNodes = new List<TreeNode>();
foreach (TreeNode node in nodes)
{
if (node.Checked)
{
checkedNodes.Add(node);
}
else
{
// find checked childs
checkedNodes.AddRange(FindCheckedNodes(node.Nodes));
}
}
return checkedNodes;
}
这是我的加载事件处理程序,我在其中调用我的 LoadConfig:
private void Form1_Load(object sender, EventArgs e)
{
Initializetreeview();
var cmdArgs = Environment.GetCommandLineArgs();
if (cmdArgs.Length == 1)
{
//MessageBox.Show("None file loaded as parameter");
}
if (cmdArgs.Length == 2)
{
//MessageBox.Show("JSON file is not loaded as parameter");
var dconfFilename = cmdArgs[1];
LoadConfig(dconfFilename);
}
}
因为LoadConfig
方法假定TreeView
控件已经有名称的节点,所以你需要在执行LoadConfig
方法之前初始化TreeView
//Create method which initialize treeview control with your nodes
private void InitializeTreeView()
{
this.treeView1.Nodes.Add(new TreeNode("chapter1") { Tag = @"\include {chapter1}" });
this.treeView1.Nodes.Add(new TreeNode("chapter2") { Tag = @"\include {chapter2}" });
this.treeView1.Nodes.Add(new TreeNode("chapter3") { Tag = @"\include {chapter3}" });
this.treeView1.Nodes[0].Nodes.Add(new TreeNode("section1") { Tag = @"\input {sec1}" });
this.treeView1.Nodes[1].Nodes.Add(new TreeNode("section2") { Tag = @"\input {sec2}" });
this.treeView1.Nodes[2].Nodes.Add(new TreeNode("section3") { Tag = @"\input {sec3}" });
}
private void Form_Load(Object sender, EventArgs e)
{
this.InitializeTreeView();
//Now you can load your config
var cmdArgs = Environment.GetCommandLineArgs();
if (cmdArgs.Length == 1)
{
//MessageBox.Show("None file loaded as parameter");
}
if (cmdArgs.Length == 2)
{
//MessageBox.Show("JSON file is not loaded as parameter");
var dconfFilename = cmdArgs[1];
LoadConfig(dconfFilename);
}
}
我有 winForms 项目,我的 button_click 1 是添加到我的文档章节之一的元素中。我想将我的配置保存在配置文件 test.json 中(它是以 JSON 格式编写的)。我正在保存通过选中复选框选择的所有内容。稍后我想加载选中的复选框。但是如何等到 button_click1
事件被点击并且我的复选框会出现。我的加载文件如下所示:
private void SaveConfig(string path)
{
var config = new DocConfig();
config.Parts = new List<DocPart>();
foreach (TreeNode node in treeView1.Nodes)
{
{
config.Parts.Add(new DocPart { NodeTitle = node.Text, NodeChecked = node.Checked });
}
{
foreach (TreeNode child in node.Nodes)
{
config.Parts.Add(new DocPart { ChildTitle = child.Text, ChildChecked = child.Checked });
}
}
var configString = config.SaveToString();
File.WriteAllText(path, configString);
}
}
private void LoadConfig(string path)
{
var cfgString = File.ReadAllText(path);
var cfg = DocConfig.LoadFromString(cfgString);
foreach (var part in cfg.Parts)
{
foreach (TreeNode node in treeView1.Nodes)
{
if (part.NodeTitle == "chap1")
{
node.Checked = part.NodeChecked;
}
if (part.NodeTitle == "chap2")
{
node.Checked = part.NodeChecked;
}
if (part.NodeTitle == "chap3")
{
node.Checked = part.NodeChecked;
}
}
}
}
}
}
删除了 button1_click() 并添加了这个 class
private void Initializetreeview();
treeView1.Nodes.Add(new TreeNode("chapter1") { Tag = @"\include {chapter1}" }); ;
treeView1.Nodes.Add(new TreeNode("chapter2") { Tag = @"\include {chapter2}" });
treeView1.Nodes.Add(new TreeNode("chapter3") { Tag = @"\include {chapter3}" });
treeView1.Nodes[0].Nodes.Add(new TreeNode("section1") { Tag = @"\input {sec1}" });
treeView1.Nodes[1].Nodes.Add(new TreeNode("section2") { Tag = @"\input {sec2}" });
treeView1.Nodes[2].Nodes.Add(new TreeNode("section3") { Tag = @"\input {sec3}" });
正在从添加的列表中删除 button2_Click:
private void button2_Click(object sender, EventArgs e)
{
RemoveChecked(treeView1.Nodes);
}
void RemoveChecked(TreeNodeCollection nodes)
{
foreach (TreeNode checkedNode in FindCheckedNodes(nodes))
{
nodes.Remove(checkedNode);
}
}
private List<TreeNode> FindCheckedNodes(TreeNodeCollection nodes)
{
List<TreeNode> checkedNodes = new List<TreeNode>();
foreach (TreeNode node in nodes)
{
if (node.Checked)
{
checkedNodes.Add(node);
}
else
{
// find checked childs
checkedNodes.AddRange(FindCheckedNodes(node.Nodes));
}
}
return checkedNodes;
}
这是我的加载事件处理程序,我在其中调用我的 LoadConfig:
private void Form1_Load(object sender, EventArgs e)
{
Initializetreeview();
var cmdArgs = Environment.GetCommandLineArgs();
if (cmdArgs.Length == 1)
{
//MessageBox.Show("None file loaded as parameter");
}
if (cmdArgs.Length == 2)
{
//MessageBox.Show("JSON file is not loaded as parameter");
var dconfFilename = cmdArgs[1];
LoadConfig(dconfFilename);
}
}
因为LoadConfig
方法假定TreeView
控件已经有名称的节点,所以你需要在执行LoadConfig
方法之前初始化TreeView
//Create method which initialize treeview control with your nodes
private void InitializeTreeView()
{
this.treeView1.Nodes.Add(new TreeNode("chapter1") { Tag = @"\include {chapter1}" });
this.treeView1.Nodes.Add(new TreeNode("chapter2") { Tag = @"\include {chapter2}" });
this.treeView1.Nodes.Add(new TreeNode("chapter3") { Tag = @"\include {chapter3}" });
this.treeView1.Nodes[0].Nodes.Add(new TreeNode("section1") { Tag = @"\input {sec1}" });
this.treeView1.Nodes[1].Nodes.Add(new TreeNode("section2") { Tag = @"\input {sec2}" });
this.treeView1.Nodes[2].Nodes.Add(new TreeNode("section3") { Tag = @"\input {sec3}" });
}
private void Form_Load(Object sender, EventArgs e)
{
this.InitializeTreeView();
//Now you can load your config
var cmdArgs = Environment.GetCommandLineArgs();
if (cmdArgs.Length == 1)
{
//MessageBox.Show("None file loaded as parameter");
}
if (cmdArgs.Length == 2)
{
//MessageBox.Show("JSON file is not loaded as parameter");
var dconfFilename = cmdArgs[1];
LoadConfig(dconfFilename);
}
}