BladeLogan Ответов: 1

Как сохранить первый текст в текстовом поле и не перезаписать его C# .NET (просто)


Я работаю над очень простым проектом, где я могу скопировать что-то в буфер обмена, и он сохраняет это в RichTextBox в моем приложении. Я сделал его циклическим и проверяю буфер обмена каждые 0,5 секунды с помощью таймера, но как мне сделать так, чтобы первая копия оставалась в текстовом поле, потому что то, что она делает сейчас,:

- Я копирую что-то в буфер обмена
-Он отправляет его в текстовое поле
-Когда я копирую что-то еще, оно перезаписывает это

Как я могу заставить их добавлять один за другим?

Это то, что я получил до сих пор;


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CBR
{
    public partial class mainFrm : Form
    {
        public mainFrm()
        {
            InitializeComponent();
        }

        private void mainFrm_Load(object sender, EventArgs e)
        {
        }

        private void clipboardUpdater_Tick(object sender, EventArgs e)
        {
            richTextBox1.Text = Clipboard.GetText();
        }
    }
}


Что я уже пробовал:

Я пробовал делать
richtextbox1 отображение.Текст += Буфер Обмена.GetText (); но это просто добавляет один за другим, мне нужно сделать так, чтобы он считался только один раз

1 Ответов

Рейтинг:
0

Mehdi Gholam

Вместо таймера используйте буфер обмена WM_CLIPBOARDUPDATE: .net-как отслеживать изменения содержимого буфера обмена в C#? - переполнение стека[^]

Кроме того, сохраните последний текст в переменной и перепроверьте его и текущий текст из буфера обмена и сделайте свое дело, если он изменился.


BladeLogan

Я должен был бы призвать и много других вещей.. Я пошел с этим методом..

частная clipboardUpdater_Tick недействительным(объект отправителя, EventArgs в электронной)
{
если (!richtextbox1 отображение.Текст.Содержит(Буфер Обмена.С текстом()))
{
richTextBox1. Text + = "\n " + буфер обмена.С текстом();
}
}


Гораздо проще

Mehdi Gholam

Тогда используйте вторую часть моего предложения.

Sergey Alexandrovich Kryukov

5ед.
—СА

Mehdi Gholam

Ура, Сергей!

BladeLogan

И не поймите меня неправильно, другое решение с переменной звучит потрясающе, просто и в то же время очень хорошо, дело в том, что я не знал бы, куда идти после создания переменной, которая будет хранить это значение.

Sergey Alexandrovich Kryukov

Легче не значит лучше, особенно в случае такого ярко выраженного злоупотребления, как опрос по таймеру. Решение Мехди не просто лучше, это хорошее решение против неприемлемого.
—СА

BladeLogan

Я никогда не утверждал, что мой был лучше, я просто не думал, что вкладывать столько работы во что-то простое будет полезно в будущем, я уверен, что это здорово, но так как я не понимаю, как работает p/invoke, мне потребуется гораздо больше времени, чтобы создать этот простой проект. Разве вы не согласны?

Sergey Alexandrovich Kryukov

Конечно, вы этого не утверждали. Затем используйте второй раствор.
Я не думаю, что может быть какое-либо оправдание для опроса по таймеру. Это вообще не решение, так что сравнивать нечего. Вы можете сравнить решение с решением, а не решение с не-решением. Должен ли я вообще объяснять, почему таймер вообще не решает проблему?
—СА

Mehdi Gholam

Ах! бунт юности! :)

BladeLogan

Не могли бы вы объяснить второе решение немного подробнее? Я хотел сделать что-то подобное в самом начале, но так как я никогда не использовал такой mthod, это было довольно трудно объяснить.

Итак, я начинаю с создания переменной, которая будет содержать значение текущего текста буфера обмена, а что дальше?

Mehdi Gholam

На каждом ТИКе таймера- & gt; if (lasttext != clipboard.gettext ()) {doappend(); lasttext = clipboard.gettext();}

BillWoodruff

+5 :)

Mehdi Gholam

Спасибо, Билл!