Я пишу приложение форм Windows в C#, и я создаю RichTextBox (через код, а не дизайнер). Я устанавливаю для свойства AutoWordSelection значение false, но когда я выделяю материал в поле, он все же переходит к границам слов, плюс пробел. Это ошибка в .NET, или я делаю это неправильно?RichTextBox.AutoWordSelection сломан?
ответ
Использование .NET 3.5 У меня все еще есть эта проблема. Это было сообщено Microsoft и помечено как «Wont Fix» в 2005 году. Это последние новости, которые я могу найти по этой проблеме.
Вот отчет об ошибке MS Connect: http://connect.microsoft.com/VisualStudio/feedback/details/115441/richtextboxs-autowordselection-property-does-not-work-correctly#details
Вот более свежий 2010 сообщение о другом человеке, который обратил внимание на проблему: http://sonicflare.net/2010/01/10/shipped-bug-feature/#more-192
---------- UPDATE -------------
Я запустил его, добавив дополнительное значение AutoWordSelection = False в событии Load Form.
public Form1()
{
InitializeComponent();
rich = new RichTextBox();
rich.Size = new Size(150, 50);
rich.Text = "Ignoring a bug for five years does not make it a undocumented feature.";
rich.Location = new Point(20, 20);
rich.AutoWordSelection = false;
this.Controls.Add(rich);
}
private void Form1_Load(object sender, EventArgs e)
{
this.BeginInvoke(new EventHandler(delegate
{
rich.AutoWordSelection = false;
}));
}
Проблема заключается в том, что текстовые поля динамически создаются в программе. Если вы можете себе представить, каждый раз, когда пользователь добавляет вкладку TabControl, которая у меня есть в моей форме, вкладка оснащается RichTextBox. Можно ли это зафиксировать в этом случае? – Nilbert
Возможно, попробуйте сделать это в одном из событий табуляции. Я считаю, что ключ должен был бы установить свойство в другом потоке, чем тот, на котором он создан. Также обратите внимание, в то время как ваш выбор перетаскивания работает на моем исправлении, двойной щелчок по слову все еще выбирает его. – Roast
Я также динамически создаю насыщенные текстовые поля и имел ту же проблему с выбором. Это заняло некоторое время, но я работал над этим, выполнив свою собственную процедуру отбора. Есть некоторые заметные мерцания всякий раз, когда моя рутина не согласна с выбором по умолчанию элемента управления, но это не так уж плохо.
Я создал частное целое число, которое отслеживает начальную позицию выбора. По умолчанию это -1. Затем я применил обработчик событий MouseDown для обработки нажатия левой кнопки мыши. Он обнаруживает позицию символа у указателя мыши, и если он еще не находится внутри текущего выделения, он устанавливает частное целое в текущую позицию символа.
Обработчик события MouseMove затем проверяет, что нажата левая кнопка мыши, и обновляет свойства SelectionStart и SelectionLength элемента управления в соответствии с сохраненной начальной позицией и текущей позицией символа. Обратите внимание, что начальная позиция всегда является левой стороной выбора, поэтому она следует за мышью при выборе текста назад.
Это немного сложно, если вы хотите также поддерживать перетаскивание и выделение.
Я также столкнулся с этим, но с помощью редактора с вкладками с несколькими RTB. В этом случае вы можете реализовать обходной путь, установив свойство AutoWordSelection
в False
в блок кода, который создает RichTextBox. Нравится так:
Private Sub CreateNewRTBObject(ByVal items() As String)
Try
For Each s As String In items
If Not FilePaths.Contains(s) Then
rtb = New myRTB(s)
rtb.AutoWordSelection = False
End If
Next
tabs.SetTabWidth()
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Exclamation, title)
End Try
End Sub
Такая же проблема здесь с RichTextBox в TabControl. Не важно, было ли оно создано в Designer или динамически. Решение, как предложил Жост в комментарии ниже своего ответа, использовать одно из событий табуляции. После установки AutoWordSelection
на False
проблема будет периодически возвращаться при изменении вкладок. Исправлено, что устанавливалось на True
, а затем False
в событии вкладки.
Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged
RichTextBox1.AutoWordSelection = True
RichTextBox1.AutoWordSelection = False
End Sub
- 1. ListViewItemCollection.Insert сломан?
- 2. LiveAuthClient сломан?
- 3. SP.NavigationNode.get_isVisible() сломан?
- 4. KVO все еще «сломан»?
- 5. Ruby String to_time сломан?
- 6. Instagram API - user_recent_media сломан?
- 7. JSON.parse (json) он сломан
- 8. AIX diff -b сломан?
- 9. Xcode 8.1 UIDataSourceModelAssociation сломан?
- 10. Delphi TRegEx backreference сломан?
- 11. Android NDK seekg сломан?
- 12. Rx.js fromEvent + flatMapLatest сломан?
- 13. слайдера изображений Frontend сломан
- 14. Java Path.startswith() сломан?
- 15. Почему Wordpress Jquery сломан?
- 16. Неужели мой fma() сломан?
- 17. Синтаксис/Intellisense сломан?
- 18. jquery tipsy сломан
- 19. Tensorflow: градиент reduce_prod сломан?
- 20. mod_rewrite теперь сломан?
- 21. AVAudioConverter сломан прошивка 10
- 22. Почему мой System.nanoTime() сломан?
- 23. CakePHP3 Auth redirectURL сломан
- 24. readthedocs сломан; как исправить?
- 25. Alchemy AS3_Shim сломан?
- 26. Facebook комментарии плагин сломан?
- 27. Ruby Bignum сломан?
- 28. ZODB Mountpoint сломан?
- 29. Z-index сломан
- 30. haml + rails3 + with_options сломан?
Что именно вы подразумеваете под «прыжками до границ слов»? AutoWordSelection = True позволяет пользователю дважды щелкнуть слово и выбрать его. Если это не работает, отправьте фрагмент кода и более подробное описание того, что происходит. – Roast
Если вы поместите курсор в середину слова и перетащите его в середину другого слова, у него должно быть половина обоих выбранных слов. Это не тот случай.Когда вы перетаскиваете его на другое слово, он выбирает все слово плюс пробел в правой части слова, а не только символы, которые вы нажимаете на мышь. Если вы хотите увидеть, что я имею в виду, просто создайте richtextbox, введите его и попробуйте выделить группу слов, и вы увидите, что он «прыгнет» на край ближайшего слова, а не останется точно с помощью мыши. – Nilbert