2016-08-07 4 views
0

Я всегда использовал невидимые текстовые поля для передачи данных в своих приложениях. Теперь я хочу остановить это. Поэтому мне нужно научиться этому. И прямо сейчас я застрял в проблеме передачи строки из public Form1() в private void richTextBox1_KeyDown. Я не уверен, как механизм работает для передачи строк.C# Передача строки из public Form1 в Частную пустоту

Вот мой код:

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); 
     } 
    } 
} 

я поставил «???» где я понятия не имею, что делать. Пожалуйста, помогите

+0

Является ли текстовое поле в той же форме или другой форме? – Sajeetharan

+0

Почему вы не ставите статическую строку для хранения значения, которое вы сейчас используете в текстовом поле? – brykneval

+0

В той же форме Sajeetharan – KrisPus

ответ

2

Сохраните имя файла как переменную-член и используйте его везде. Прочитайте файл, используя 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); 
    } 
    } 
} 
+0

Я попробовал, и он разбился, потому что он не мог быть сохранен при редактировании. Но это не имеет значения. Я использовал окно сообщения, чтобы подтвердить, прошла ли строка, и это произошло! "MessageBox.Show (_fileName);" Большое спасибо! – KrisPus

+0

Всегда добавляйте блок try-catch, чтобы избежать необработанного исключения и показывать ошибку пользователю. –

+0

Я знаю. Но я не вижу здесь этого. – KrisPus

0

Как вы показываете, ваш 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); 
     } 
    } 
} 
0

Что касается части о желании прекратить использовать невидимые текстовые поля, я предлагаю вам посмотреть в привязке данных и развязки бизнес-логику и логику формы.

Но с минимальными изменениями, как утверждают другие, вы можете просто сохранить состояние (имя файла) в Form1, чтобы его можно было получить в событии KeyDown.

+0

У вас есть какой-нибудь пример, ссылка или что-нибудь, что может заставить меня идти в путь? Потому что это похоже на то, что меня интересует. – KrisPus

Смежные вопросы