Как сделать кнопку refre sh, которая обновляет sh ввод каждого пользователя в минутах формы - PullRequest
0 голосов
/ 28 мая 2020

У меня есть код, который читает в richtextbox последнюю строку из текстового файла. Сейчас я хочу представить кнопку refre sh с чем-то вроде текстового поля. Я хочу поставить это так, чтобы пользователь мог ввести число в форму, которое означает минуты для кода, а затем пользователь нажимает кнопку refre sh, и программа будет обновлять sh каждые ... минут. Программа просто вызывает последний файл, открытый в диалоговом окне открытия файла, обновляет sh его в richtextbox каждые ... минут.

Вот что я сделал для обновления sh только когда вы нажимаете кнопку refre sh (может быть, чтобы реализовать это так, как я хочу, я должен поместить на форму еще одну кнопку и текстовое поле?):

    private string thePath;
    public async void OpenFileBtn_ClickAsync(object sender, EventArgs e)
    {
         using(OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text File|*.txt", Multiselect = false })
         {

             if (ofd.ShowDialog() == DialogResult.OK)
             {
                    thePath = ofd.FileName;
                    Refresh();
             }
         }
    }




    private void Refresh()
    {
        using (StreamReader rd = new StreamReader(thePath))
        {
            string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
            ReaderRichTxtBox.Text = lines[lines.Length - 1];
        }
    }

    private void RefreshBtn_Click(object sender, EventArgs e)
    {
        Refresh();
    }

Каким должен быть код? Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020
public partial class TextReaderForm : Form
{

    public TextReaderForm()
    {
        InitializeComponent();
    }
    private System.Windows.Forms.Timer refreshtimer;
    private string thePath;
    public async void OpenFileBtn_ClickAsync(object sender, EventArgs e)
    {
         using(OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text File|*.txt", Multiselect = false })
         {

             if (ofd.ShowDialog() == DialogResult.OK)
             {
                //using (StreamReader rd = new StreamReader(ofd.FileName))
                {
                    //ReaderRichTxtBox.Text = await rd.ReadToEndAsync();
                    //string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                    //ReaderRichTxtBox.Text = lines[lines.Length - 1];
                    thePath = ofd.FileName;
                    Refresh();
                }
             }
         }
    }

    private void Refresh()
    {
        using (StreamReader rd = new StreamReader(thePath))
        {
            string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
            ReaderRichTxtBox.Text = lines[lines.Length - 1];
        }
    }

    private void RefreshBtn_Click(object sender, EventArgs e)
    {
        Refresh();
    }

    private void RefreshTimerBtn_Click(object sender, EventArgs e)
    {
        refreshtimer = new System.Windows.Forms.Timer();
        refreshtimer.Tick += new EventHandler(timer_Tick);
        refreshtimer.Interval = Convert.ToInt32(RefreshTimerTxtBox.Text) * 60000; //60000 is one minute
        timer1.Start();
    }
    void timer_Tick(object sender, EventArgs e)
    {
        Refresh();
    }
}
0 голосов
/ 28 мая 2020

Вы должны использовать какой-то таймер. Например, вы можете объявить частный таймер обновления System. Windows .Forms.Timer и установить его при нажатии кнопки. Предполагая, что имя текстового поля - TextBox1, код должен выглядеть следующим образом:

 private System.Windows.Forms.Timer refreshtimer;
 private string thePath;
    public async void OpenFileBtn_ClickAsync(object sender, EventArgs e)
    {
         using(OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text File|*.txt", Multiselect = false })
         {

             if (ofd.ShowDialog() == DialogResult.OK)
             {
                    thePath = ofd.FileName;
                    Refresh();
             }
         }
    }




    private void Refresh()
    {
        using (StreamReader rd = new StreamReader(thePath))
        {
            string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
            ReaderRichTxtBox.Text = lines[lines.Length - 1];
        }
    }

    private void RefreshBtn_Click(object sender, EventArgs e)
    {
            refreshtimer = new System.Windows.Forms.Timer();
            refreshtimer.Tick += new EventHandler(timer_Tick);
            refreshtimer.Interval = Convert.ToInt32(TextBox1.Text) * 60000; //60000 is one minute
            refreshtimer.Start();
    }
    void timer_Tick(object sender, EventArgs e)
        {
                   Refresh();
        }

При нажатии кнопки refre sh я устанавливаю интервал равным значению TextBox (интервал устанавливается в миллисекундах, что вот почему я умножил на 60000). Предлагаю вам поместить инициализацию таймера в конструктор класса. Если у вас есть вопросы, задавайте мне дополнительные вопросы, и я отредактирую свой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...