c# RTB - вставить простой текст без цветов/шрифтов?

Если я правильно понимаю, добавив:

width:fit-content;

следует вычеркнуть слово

6
задан SZT 28 April 2015 в 02:51
поделиться

3 ответа

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

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

-121--4859872-

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

Хотя вы можете извлечь файл с помощью getSelector () , я не думаю, что вы можете извлечь определенный Drawable из StateListDrawable , а также не кажется возможным программно извлечь цвет непосредственно из ColorDrawable .

Для установки цвета необходим StateListDrawable , как описано выше. Этот параметр можно задать в списке с помощью атрибута android: listSelector , определив в XML файл, например:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>
-121--867839-

Предположим, что WinForms: попробуйте следующее: определите RichTextBox с обработчиком событий KeyDown, например:

Только добавление пример:

    private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.V) 
        {
            richTextBox1.Text += (string)Clipboard.GetData("Text"); 
            e.Handled = true; 
        }
    }

[Edit]

Добавление RTF буфера обмена в RichTextBox в текущей точке вставки (начало выбора), пример:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.V)  
    { 
            // suspend layout to avoid blinking
            richTextBox2.SuspendLayout();

            // get insertion point
            int insPt = richTextBox2.SelectionStart;

            // preserve text from after insertion pont to end of RTF content
            string postRTFContent = richTextBox2.Text.Substring(insPt);

            // remove the content after the insertion point
            richTextBox2.Text = richTextBox2.Text.Substring(0, insPt);

            // add the clipboard content and then the preserved postRTF content
            richTextBox2.Text += (string)Clipboard.GetData("Text") + postRTFContent;

            // adjust the insertion point to just after the inserted text
            richTextBox2.SelectionStart = richTextBox2.TextLength - postRTFContent.Length;

            // restore layout
            richTextBox2.ResumeLayout();

            // cancel the paste
            e.Handled = true;
    } 
} 

[End Edit]

Примечание 0: Вставленный в текст предполагает текущие настройки стиля, действующие для RichTextBox: если для параметра "ForeGround color набора задано значение" Blue ", вставленный в текст будет иметь синий цвет.

Примечание 1: Это то, что я быстро стучал вместе и проверял всего несколько раз, создавая несколько разноцветных и странных форматированных RTF для буфера обмена с помощью WordPad: затем вставляясь в RichTextBox1 во время выполнения: он действительно отделял весь цвет, отступы и т.д.

Так как он не полностью протестирован, использовать

Примечание 2: Это не будет обрабатывать случай 'Вставить или' Вставить через контекстное меню, очевидно.

Приветствуйте все критические замечания к этому ответу и немедленно снимите его, если он не «на марке».

9
ответ дан 8 December 2019 в 02:17
поделиться

Существует очень простой способ сделать это, которое работает хорошо на меня:

private bool updatingText;

public MyForm() {
    InitializeComponent();
    inputTextBox.TextChanged += inputTextBox_TextChanged;
}
private void inputTextBox_TextChanged(object sender, EventArgs e)
{
    if (updatingText)
    {
        return;
    }
    updatingText = true;
    try
    {
        var i = inputTextBox.SelectionStart;
        var text = inputTextBox.Text;
        inputTextBox.Rtf = "";
        inputTextBox.Text = text;
        inputTextBox.SelectionStart = i;
    }
    catch (Exception){}
    updatingText = false;
}

Начиная с Text свойство по сути, не форматируя сброс текста RTF, затем устанавливающего текстовое свойство на необработанный вход, удаляет любой из специальных объектов, которые, возможно, были вставлены в.

0
ответ дан 8 December 2019 в 02:17
поделиться

Добавьте обработчик в клавишу -Vent, чтобы перехватить стандартную пасту и вручную вставлять только простой текст:

private void rtb_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.V)
    {
        ((RichTextBox)sender).Paste(DataFormats.GetFormat("Text"));
            e.Handled = true;
    }
}
29
ответ дан 8 December 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: