【问题标题】:Apply/Cancel button event logic应用/取消按钮事件逻辑
【发布时间】:2013-03-26 11:11:15
【问题描述】:

我有一个类 XMLProfile,它具有将数据写入/编辑/删除数据到 xml 文件中的方法。此数据在 Visual C# 中被读取并显示在列表视图中

public void xmlwriter(string path)
        {
            XmlDocument xdoc = new XmlDocument();                
            xdoc.Load("C:\\product.txt);
            XmlNode fold = xdoc.CreateElement("Folder");
            XmlNode name = xdoc.CreateElement("Name");
            XmlNode rec = xdoc.CreateElement("Recurse");
            name.InnerText = path;
            rec.InnerText = "true";
            fold.AppendChild(name);
            fold.AppendChild(rec);
            xdoc.SelectSingleNode("//Folders").AppendChild(fold);
            xdoc.Save("C:\\product.txt");
        }

上面是write方法(向xml中添加新数据),下面是delete

public void delete(string snode)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load("C:\\product.txt");
            foreach (XmlNode node in xdoc.SelectNodes("BackupProfile/Folders/Folder"))
            {
                string temp = node.SelectSingleNode("Name").InnerText;
                if (temp == snode)
                {
                    node.ParentNode.RemoveChild(node);
                }
            }
            xdoc.Save("C:\\product.txt");
        }

类似的编辑和重置方法。

从我的主程序表单中,我使用按钮单击调用这些方法

private void button8_Click(object sender, EventArgs e)
        {
            this.folderBrowserDialog1.ShowNewFolderButton = false;
            this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyComputer;
            DialogResult result = this.folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                // user selected folder will be added to the XML Profile for backup
                string path = this.folderBrowserDialog1.SelectedPath;
                XMLProfile xml = new XMLProfile();
                xml.xmlwriter(path);
                listView1.Items.Add(path);
            }
        }

上述方法用于添加新数据,从 XMLProfile 类调用 xmlwriter 方法。

一切正常,但现在我意识到在更改完成并保存之前只有一个应用按钮是正确的。

我该如何实现呢?我使用了这个链接StackOverflow,但它对我不起作用,实际上我不确定如何在我的项目中实现它。除了应用按钮,我还有一个取消按钮。 取消:很明显不应该保存更改,而只是重新加载 xml 文件以恢复到以前保存的版本。

感谢任何帮助,如果需要任何进一步的信息,请询问。谢谢。

【问题讨论】:

    标签: c# winforms visual-studio-2010 logic


    【解决方案1】:

    您可以将应用按钮设置为禁用,只有在保存成功后才启用它

    【讨论】:

    • 对不起,我可能理解错了。您的意思是应用按钮或多或少地检查保存是否成功。但这意味着取消按钮会带来更多麻烦。
    • 不,我的意思是禁用应用按钮,并在保存按钮代码的最后一步启用它
    【解决方案2】:

    您能否在此处粘贴您的 ApplyButtonClick 事件处理程序以获得更准确的答案? 但我猜你需要这样的东西

    public void OnApplyButtonClick(object sender, EvenArgs e)
    {
    this.ApplyBtn.Enabled = false;
    //Your logic Here
    }
    
    
    public void xmlwriter(string path)
            {
    btnApply.Enabled = false;
                XmlDocument xdoc = new XmlDocument();                
                xdoc.Load("C:\\product.txt);
                XmlNode fold = xdoc.CreateElement("Folder");
                XmlNode name = xdoc.CreateElement("Name");
                XmlNode rec = xdoc.CreateElement("Recurse");
                name.InnerText = path;
                rec.InnerText = "true";
                fold.AppendChild(name);
                fold.AppendChild(rec);
                xdoc.SelectSingleNode("//Folders").AppendChild(fold);
                xdoc.Save("C:\\product.txt");
    btnApply.Enabled = true;
            }
    
    public void DeleteNode(string snode)
            {
    this.ApplyBtn.Enabled = false;
                XmlDocument xdoc = new XmlDocument();
                xdoc.Load("C:\\product.txt");
                foreach (XmlNode node in xdoc.SelectNodes("BackupProfile/Folders/Folder"))
                {
                    string temp = node.SelectSingleNode("Name").InnerText;
                    if (temp == snode)
                    {
                        node.ParentNode.RemoveChild(node);
                    }
                }
                xdoc.Save("C:\\product.txt");
    this.ApplyBtn.Enabled = true;
        }
    

    【讨论】:

    • 实际上我还没有用应用按钮事件定义任何东西。 private void button9_Click(object sender, EventArgs e) { //XMLProfile xml = new XMLProfile(); //xml.save(); }
    • 请尝试我在上面答案中提到的方法,它应该可以工作
    • 它们是 2 个不同的类,我不知道该怎么做...因为 btnApply.Enabled = false; 显示错误(对我来说 btnApply = button9)
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多