Часть Editbox ComboBox выбрана автоматически

упрощенный. Очень нормальный взгляд, его почти утешительный:

var userName = "Sean";

console.log(name());

function name() {
  return userName;
}

Однако. Что, если я включу на мою страницу действительно удобную библиотеку javascript, которая переводит продвинутые символы в их представления на базовом уровне?

Подождите ... что?

Я имею в виду. Если кто-то набирает персонажа с каким-то акцентом на него (например, французский или испанский персонаж), но мне нужны только «английские» персонажи? A-z в моей программе? Ну ... испанские «n ~» и французские «e /» персонажи (я использовал для этого два символа, но вы, вероятно, можете сделать умственный прыжок в персонаже, который представляет акценты), эти символы могут быть переведены в базовые символы 'n' и 'e'.

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

Одна проблема: у нее есть функция в ней 'name', как и моя функция.

Это то, что называется столкновением. У нас есть две функции, объявленные в той же области с тем же именем. Мы хотим избежать этого.

Итак, нам нужно каким-то образом охватить наш код.

Единственный способ использования кода области видимости в javascript состоит в том, чтобы обернуть его в функцию:

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 

  var userName = "Sean";

  console.log(name());

  function name() {
    return userName;
  }
}

Это может решить нашу проблему. Теперь все закрыто и доступно только из наших открывающих и закрывающих фигурных скобок.

У нас есть функция в функции ... которая выглядит странно, но полностью законна.

Только одна проблема. Наш код не работает. Наша переменная userName никогда не повторяется в консоли!

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

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 

  var userName = "Sean";

  console.log(name());

  function name() {
    return userName;
  }
}

main();

Или перед!

main();

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 

  var userName = "Sean";

  console.log(name());

  function name() {
    return userName;
  }
}

Второе беспокойство: каковы шансы, что имя «главное» еще не используется? ... так очень, очень тонко.

Нам нужно больше очков. И какой-то способ автоматически выполнить нашу функцию main ().

Теперь мы переходим к функциям автоматического выполнения (или выполняем самоисследование, независимо от того, что угодно).

(() {}) ();

Синтаксис неудобен как грех. Однако он работает.

Когда вы завершаете определение функции в круглых скобках и включаете список параметров (другой набор или круглые скобки!), он действует как вызов функции .

So снова посмотрим на наш код, с некоторым самоисполняющимся синтаксисом:

(function main() {
  var userName = "Sean";

    console.log(name());

    function name() {
      return userName;
    }
  }
)();

Итак, в большинстве обучаемых вы читаете, теперь вы будете бомбардировать термином «анонимное самоисполнение» или что-то подобное.

После многих лет профессионального развития я сильно настоятельно призываю вас называть каждую функцию, которую вы пишете для целей отладки.

Когда что-то пойдет не так (и это произойдет), вы будете проверять обратную линию в своем браузере. всегда проще сузить проблемы с кодом, когда записи в трассировке стека имеют имена!

Очень сильно надолго, и я надеюсь, что это поможет!

15
задан 24 April 2009 в 15:04
поделиться

2 ответа

Работавший для меня для изменения selectionLength на 0, когда эти WM_WINDOWPOSCHANGED назван. Работы даже с набором tableLayoutPanel к %.

protected override void WndProc(ref Message m) {
    base.WndProc(ref m);

    if(m.Msg == 0x0047) {   // WM_WINDOWPOSCHANGED = 0x0047 
        if (SelectionLength != 0) {
            SelectionLength = 0;
        }
    }
}

0
ответ дан 1 December 2019 в 04:01
поделиться

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

    foreach (var cb in Controls.OfType<ComboBox>())
    {
        cb.Resize += (sender, e) => {
            if (!cb.Focused)
                cb.SelectionLength = 0;
        };
    }

намеренно выделенный текст был отменен

Эта ошибка WinForms не влияет на выбранные ComboBoxes, поэтому, игнорируя те, которые имеют Focus, мы решаем проблему потери текущих выделений.

Мне пришлось бы добавить обработчик событий к каждому ComboBox на моем dialog.

Об этом позаботился цикл foreach. Поместите его в InitializeComponent () или в свой .ctor, если вы не хотите нарушить работу дизайнера, или чтобы дизайнер нарушил это.

было много мерцания

Я вижу мерцание только при очень сильном изменении размера быстро, но я использую Win7, поэтому в XP все может быть иначе.

13
ответ дан 1 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

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