2017-08-02 66 views
0

我正在C#中开发一个语法编辑器,您可以在FastColoredTextBox组件中编写代码,然后将其保存为.html文件。但是,我有Save As选项的代码。我遇到的唯一问题是,当用户保存.html文件时,弹出相同的对话框Save As。但我们之前已经保存过它。我只想在键盘上按Ctrl+S,它会自动保存为.html文件后的文件更改。如何将文件保存在fastcoloredtextbox中?

这里是我对Save As选项的代码。

private void toolStripButton2_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog sfd = default(SaveFileDialog); 
    if (FastColoredTextBox1.Text.Length > 0) 
    { 
     sfd = new SaveFileDialog(); 
     sfd.Filter = "HTML Files|.html|" + "All Files|*.*"; 

     sfd.DefaultExt = "html"; 

     sfd.ShowDialog(); 


     string location = null; 
     string sourcecode = FastColoredTextBox1.Text; 
     location = sfd.FileName; 
     if (!object.ReferenceEquals(sfd.FileName, "")) 
     { 
      using (System.IO.StreamWriter writer = new System.IO.StreamWriter(location, false)) 
      { 
       writer.Write(sourcecode); 
       writer.Dispose(); 
      } 
     } 
    } 
    if (Directory.Exists(sfd.FileName) == true) 
    { 
     string location = sfd.InitialDirectory; 
     File.WriteAllText(location, (FastColoredTextBox1.Text)); 
    } 
} 

任何人都可以帮助我实现这个目标吗?请帮忙。

+0

如果你想保存它,不要使用SaveFileDialog,只需使用File.WriteAllText。 – Will

+0

随着@威尔的建议,如果你想要绑定到控制+ s,你需要在你的窗体上有一个Key_Down事件处理程序(假设这是winforms)。然后您需要检查它是否已保存,并使用File.WriteAllText,或者如果尚未保存,请启动SaveFileDialog。编辑:我看到这是在一个工具栏按钮现在点击。您可以使用按钮的属性绑定到ctrl + s,而不是使用Key_Down事件。所有其他保持不变。 – Michael

+0

你可以指定这是否是winforms吗?同时请考虑尽可能以最好的语法表达您的问题。看到一个语法不好的问题可能会让一些用户觉得好像你没有真正投入到这个问题中。 –

回答

1

你应该做别人建议的将其另存为一个带有.html作为扩展名的文本文件,但我在这里回答你的ctrl + s问题。这是假设你在一个winform(因为你还没有指定):

yourForm.KeyPreview = true; 
yourForm.KeyDown += new KeyEventHandler(Form_KeyDown); 

,你的处理程序应该是这个样子:

void Form_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.S) 
     { 
      string sourceCode = FastColoredTextBox1.Text; 
      // not sure what's going on for you "location" but you need to do that logic here too 
      File.WriteAllText(location, sourceCode); 
      e.SuppressKeyPress = true; 
     } 
    } 

希望帮助芽

+0

谢谢你。它非常有效。 – Roebebin