Ниже, кажется, работает. Ввести событие обрабатывает переключение вкладок к управлению и работам MouseDown, когда управление нажато.
private ########### void textBox1_Enter(object sender, EventArgs e)
{
textBox1.SelectAll();
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (textBox1.Focused)
textBox1.SelectAll();
}
IIRC, более старые препроцессоры C требовали, чтобы # был первым символом в строке (хотя я никогда не встречал ни одного, у которого было бы это требование).
Я никогда не видел ваш код таким, как ваш первый пример. Я обычно писал директивы препроцессора, как во втором примере. Я обнаружил, что это визуально меньше мешает отступу в реальном коде (не то, что я больше пишу на C).
В руководстве по препроцессору GNU C говорится:
Директивы предварительной обработки - это строки в ваша программа, начинающаяся с символа '#'. Пробелы разрешены до и после '#'.
Я предпочитаю третий стиль, за исключением охранников включения, для которых я использую второй стиль.
Мне вообще не нравится первый стиль - я думаю о #define
как о инструкции препроцессора, хотя на самом деле, конечно, это не 't, это #
, за которым следует инструкция препроцессора define
. Но поскольку я думаю об этом именно так, мне кажется неправильным их разделять. Я ожидаю, что текстовые редакторы, написанные людьми, которые отстаивают этот стиль, будут иметь блокировку отступа / отмену отступа, которая работает с кодом, написанным в этом стиле. Но я бы не хотел столкнуться с этим с помощью текстового редактора, который этого не сделал.
Вот. Нет смысла потакать древним препроцессорам, где # должен быть первым символом строки, если только вы не можете сразу перечислить все другие различия между этими реализациями и стандартным C, чтобы избежать других вещей, которые вы могли бы сделать то, что они не поддержали бы. Конечно, если вы действительно работаете с предустановленным компилятором, достаточно честно.
Я видел, как это делалось всеми тремя способами, похоже, это вопрос стиль, а не синтаксис
Хотя обычно второй пример является наиболее распространенным, я встречал случаи, когда первый (или третий) использовался, чтобы помочь различить несколько уровней #ifdefs. Иногда логика может стать глубоко вложенной, и единственный способ понять ее с первого взгляда - использовать отступы, как это принято делать в блоках кода между {и}.
Директивы препроцессора - это строки, включенные в наши программы, которые на самом деле не являются операторами программы, а являются директивами для препроцессора. Этим строкам всегда предшествует знак решетки (#). Перед и после символа «#» разрешены пробелы. Как только обнаруживается символ новой строки, директива препроцессора считается завершенной.
Других правил в отношении стандарта C / C ++ не существует, так что это остается вопросом стиля и удобочитаемости, я видел / писал программы только вторым способом, который вы разместили, хотя третий кажется более читабельным.