【问题标题】:c# Pass string from public Form1 to Private voidc# 将字符串从 public Form1 传递到 Private void
【发布时间】:2016-08-07 05:22:11
【问题描述】:

我一直使用不可见的文本框在我的应用程序中传递数据。现在我想阻止这一切。所以我需要学习如何做到这一点。现在,我遇到了将字符串从公共 Form1() 传递到私有 void richTextBox1_KeyDown 的问题。我不确定该机制如何用于传递字符串。

这是我的代码:

public Form1(string file)
{
    InitializeComponent();
    StreamReader sr = new StreamReader(file);
    string filetext = sr.ReadToEnd();
    richTextBox1.Text = filetext;
    string TITLE = file.Split(new string[] { @"\" }, StringSplitOptions.None).Last();
    this.Text = TITLE;
} 

如果您这样做,字符串文件将包含以下内容:“使用(应用程序)打开”:C:\Users\Administrator\Downloads\text.tyx 如果打开原始 .exe 文件,字符串将为空。

如果字符串文件是否为空,这是我要捕获的部分:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.S && e.Control)
    {
        if (Form1(???) != "")
        {
            richTextBox1.SaveFile(Form1(???), RichTextBoxStreamType.PlainText);
        }
    }
}

我把“???”我不知道该怎么做。 请帮忙

【问题讨论】:

  • 文本框是同格式还是不同格式?
  • 你为什么不把你当前持有的价值的静态字符串放在文本框上?
  • 与 Sajeetharan 形式相同

标签: c# string


【解决方案1】:

将文件名保存为成员变量并在任何地方使用它。使用 File.ReadAllText(_fileName) 读取文件:

private readonly string _fileName;

public Form1(string fileName)
{
  InitializeComponent();
  _fileName = fileName;
  richTextBox1.Text = File.ReadAllText(_fileName);
  Text = _fileName.Split(new[] {@"\"}, StringSplitOptions.None).Last();
}

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.S && e.Control)
  {
    if (_fileName == "")
    {
      richTextBox1.SaveFile(_fileName, RichTextBoxStreamType.PlainText);
    }
  }
}

【讨论】:

  • 我试了一下,因为在编辑时无法保存,所以崩溃了。不过没关系。我使用了一个消息框来确认字符串是否通过了,它确实通过了! "MessageBox.Show(_fileName);"非常感谢!
  • 始终添加 try-catch 块以避免未处理的异常并向用户显示错误。
  • 我知道。但我认为这里没有必要。
【解决方案2】:

正如你所展示的,你的 Form1 有一个构造函数,它获取一个字符串作为参数。 因此,实例化您的 Form1 的代码可能类似于:

Form1 form1 = new Form1("Some String");
form1.Show();  //or form1.ShowDialog();

为了在您的 Form1 代码中使用字符串文件,您可以为 Form1 类定义一个成员变量,如下所示:

class Form1:Form
{
    private string _file;

    public Form1(string file)
    {
        InitializeComponent();
        _file= file;

        // Your code
    }

}

现在 _file 已为您所熟知,您可以使用 Form1:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.S && e.Control)
    {
        if (!string.IsNullOrEmpty(_file))
        {
            richTextBox1.SaveFile(_file, RichTextBoxStreamType.PlainText);
        }
    }
}

【讨论】:

    【解决方案3】:

    关于想要停止使用不可见文本框的部分,我建议你研究数据绑定和解耦业务逻辑和表单逻辑。

    但正如其他人所说,只需进行少量更改,您就可以在 Form1 上存储状态(文件名),以便可以在 KeyDown 事件中访问它。

    【讨论】:

    • 您有任何示例、链接或任何可以让我走上正轨的东西吗?因为这听起来像是我会感兴趣的东西。
    猜你喜欢
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多