Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
В первую очередь, спасибо за ответы! 9 общих ответов. Спасибо.
Плохие новости: все ответы имели некоторые причуды или не работали совершенно верно (или вообще). Я добавил комментарий к каждому из Ваших сообщений.
Хорошие новости: я нашел способ заставить его работать. Это решение довольно просто и, кажется, работает во всех сценариях (mousing вниз, выбирая текст, снабжая вкладками фокус, и т.д.)
bool alreadyFocused;
...
textBox1.GotFocus += textBox1_GotFocus;
textBox1.MouseUp += textBox1_MouseUp;
textBox1.Leave += textBox1_Leave;
...
void textBox1_Leave(object sender, EventArgs e)
{
alreadyFocused = false;
}
void textBox1_GotFocus(object sender, EventArgs e)
{
// Select all text only if the mouse isn't down.
// This makes tabbing to the textbox give focus.
if (MouseButtons == MouseButtons.None)
{
this.textBox1.SelectAll();
alreadyFocused = true;
}
}
void textBox1_MouseUp(object sender, MouseEventArgs e)
{
// Web browsers like Google Chrome select the text on mouse up.
// They only do it if the textbox isn't already focused,
// and if the user hasn't selected all text.
if (!alreadyFocused && this.textBox1.SelectionLength == 0)
{
alreadyFocused = true;
this.textBox1.SelectAll();
}
}
, Насколько я могу сказать, это заставляет текстовое поле вести себя точно как строка поиска веб-браузера.
, Надо надеяться, это помогает следующему парню, который пытается решить эту обманчиво простую проблему.
Еще раз спасибо, парни, для всех Ваших ответов, которые помогли привести меня к корректному пути.
Ниже, кажется, работает. Ввести событие обрабатывает переключение вкладок к управлению и работам MouseDown, когда управление нажато.
private ########### void textBox1_Enter(object sender, EventArgs e)
{
textBox1.SelectAll();
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (textBox1.Focused)
textBox1.SelectAll();
}
На самом деле GotFocus является правильным событием (сообщение действительно), что Вы интересуетесь, с тех пор неважно, как Вы добираетесь до управления you’ll, получают это даже в конечном счете. Вопрос состоит в том, когда делают Вы называете SelectAll ().
Попытка это:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.textBox1.GotFocus += new EventHandler(textBox1_GotFocus);
}
private delegate void SelectAllDelegate();
private IAsyncResult _selectAllar = null; //So we can clean up afterwards.
//Catch the input focus event
void textBox1_GotFocus(object sender, EventArgs e)
{
//We could have gotten here many ways (including mouse click)
//so there could be other messages queued up already that might change the selection.
//Don't call SelectAll here, since it might get undone by things such as positioning the cursor.
//Instead use BeginInvoke on the form to queue up a message
//to select all the text after everything caused by the current event is processed.
this._selectAllar = this.BeginInvoke(new SelectAllDelegate(this._SelectAll));
}
private void _SelectAll()
{
//Clean-up the BeginInvoke
if (this._selectAllar != null)
{
this.EndInvoke(this._selectAllar);
}
//Now select everything.
this.textBox1.SelectAll();
}
}
Вы попробовали решение, предложенное на Форуме MSDN "Windows Forms, Общие" , который просто разделяет TextBox на подклассы?
Почему Вы просто не используете Событие mouseDown текстового поля? Это хорошо работает для меня и не нуждается в дополнительной булевской переменной. Очень чистый и простой, например:
private void textbox_MouseDown(object sender, MouseEventArgs e) {
if (textbox != null && !string.IsNullOrEmpty(textbox.Text))
{
textbox.SelectAll();
} }
Нажать событие текстового поля? Или даже событие MouseCaptureChanged работает на меня. - Хорошо. не работает.
, Таким образом, необходимо сделать 2 вещи:
private bool f = false;
private void textBox_MouseClick(object sender, MouseEventArgs e)
{
if (this.f) { this.textBox.SelectAll(); }
this.f = false;
}
private void textBox_Enter(object sender, EventArgs e)
{
this.f = true;
this.textBox.SelectAll();
}
private void textBox_MouseMove(object sender, MouseEventArgs e) // idea from the other answer
{
this.f = false;
}
Работы для переключения вкладок (через текстовые поля к одному) также - звонят, SelectAll () во Входят на всякий случай...
Это - немного kludgey, но в Вашем событии щелчка, используйте SendKeys.Send( "{HOME}+{END}" );
.
private bool _isSelected = false;
private void textBox_Validated(object sender, EventArgs e)
{
_isSelected = false;
}
private void textBox_MouseClick(object sender, MouseEventArgs e)
{
SelectAllText(textBox);
}
private void textBox_Enter(object sender, EventArgs e)
{
SelectAllText(textBox);
}
private void SelectAllText(TextBox text)
{
if (!_isSelected)
{
_isSelected = true;
textBox.SelectAll();
}
}
'Inside the Enter event
TextBox1.SelectAll();
хорошо, после попытки это вот - то, что Вы хотите:
Это выбрало весь текст на записи, но позволило мне выделять часть текста впоследствии или позволять Вам выделяться при первом щелчке.
запросом:
bool entered = false;
private void textBox1_Enter(object sender, EventArgs e)
{
entered = true;
textBox1.SelectAll(); //From Jakub's answer.
}
private void textBox1_Click(object sender, EventArgs e)
{
if (entered) textBox1.SelectAll();
entered = false;
}
private void textBox1_MouseMove(object sender, MouseEventArgs e)
{
if (entered) entered = false;
}
Для меня, переключение вкладок в управление выбирает весь текст.
Интересно, ComboBox с DropDownStyle=Simple имеет в значительной степени точно поведение, которое Вы ищете, я думаю.
(При сокращении высоты управления для не показа списка - и затем на более несколько пикселей - нет никакого эффективного различия между ComboBox и TextBox.)
Одна строка отвечает, что я использую..., Вы могли бы ударять себя...
Во ввести событии:
txtFilter. BeginInvoke (новый MethodInvoker (txtFilter. SelectAll));
Я вызвал SelectAll внутри события MouseUp, и у меня все сработало.
private bool _tailTextBoxFirstClick = false;
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
if(_textBoxFirstClick)
textBox1.SelectAll();
_textBoxFirstClick = false;
}
private void textBox1_Leave(object sender, EventArgs e)
{
_textBoxFirstClick = true;
textBox1.Select(0, 0);
}
Просто возьмите класс из TextBox или MaskedTextBox:
public class SMaskedTextBox : MaskedTextBox
{
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
this.SelectAll();
}
}
и используйте его на своих формах.
Я создал новый проект VB.Net Wpf. Я создал один TextBox и использовал следующий код для внутреннего кода:
Class MainWindow
Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
AddHandler PreviewMouseLeftButtonDown, New MouseButtonEventHandler(AddressOf SelectivelyIgnoreMouseButton)
AddHandler GotKeyboardFocus, New KeyboardFocusChangedEventHandler(AddressOf SelectAllText)
AddHandler MouseDoubleClick, New MouseButtonEventHandler(AddressOf SelectAllText)
End Sub
Private Shared Sub SelectivelyIgnoreMouseButton(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
' Find the TextBox
Dim parent As DependencyObject = TryCast(e.OriginalSource, UIElement)
While parent IsNot Nothing AndAlso Not (TypeOf parent Is TextBox)
parent = VisualTreeHelper.GetParent(parent)
End While
If parent IsNot Nothing Then
Dim textBox As Object = DirectCast(parent, TextBox)
If Not textBox.IsKeyboardFocusWithin Then
' If the text box is not yet focussed, give it the focus and
' stop further processing of this click event.
textBox.Focus()
e.Handled = True
End If
End If
End Sub
Private Shared Sub SelectAllText(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim textBox As Object = TryCast(e.OriginalSource, TextBox)
If textBox IsNot Nothing Then
textBox.SelectAll()
End If
End Sub
End Class