Свързан въпрос: Получаване на индекс на низ въз основа на отместване на пиксел
Знам, че това е близо до този въпрос, но това не е въпросът как да го направите директно, а въпросът как да го фалшифицирате най-добре.
Внедрявам свое собствено текстово поле за Windows Forms (защото RichTextBox е гадно) и се опитвам да намеря най-добрия начин да изчисля над кой знак е мишката, като се имат предвид низове, които са начертани на екрана. Проблемът е, че знаците могат да бъдат с променлива ширина.
Измислих две възможности:
Направете
Graphics.MeasureCharacterRange
всеки път, когато мишката се движи по начин на двоично търсене на реда, над който е мишката (както е предложено във въпроса, свързан в горната част)Съхранявайте списък с отместването на всеки знак от всеки ред.
(1) Ще има лошо представяне и
(2) ще бъде неефективно за паметта плюс ще направи въвеждането на символ O(n) операция (защото трябва да коригирате отместването на всеки знак след него) плюс невъзможно да се направи точно защото Graphics.MeasureCharacterRange
е' t прецизен (връща една стойност за един символ, друга стойност за друг знак и напълно различна стойност [която не е равна на двете предишни стойности, събрани заедно] за двете заедно в един низ. Например W
ще бъде широк 16 пиксела и f
ще бъде широк 5 пиксела, но Wf
е широк 20 пиксела. Тези числа са от действителен тест.).
Така че търся по-добра стратегия за това, за предпочитане такава, която изисква минимално пространство и O(1) изчислителна сложност (въпреки че с удоволствие ще заменя малко ефективност на паметта за ефективност на скоростта).
Graphics.MeasureCharacterRange
съществуват в HTML. Или че можете да използвате C# в HTML. И грешното прочитане на въпроса не е нещо ужасно, правя го през цялото време. съжалявам Няма нужда да гласувате против въпроса. - person Seth Carnegie   schedule 09.09.2011