Рейтинг:
37
Wayne Gaylard
Вы можете попробовать установить для свойства Forms DoubleBuffered значение true.
Manfred Rudolf Bihy
Звучит правдоподобно! 5+
Sergey Alexandrovich Kryukov
Последующий вопрос также получает ответ.
--СА
[no name]
Но я не могу получить доступ к этой охраняемой собственности. Я должен рассказать вам больше о моем коде. У меня есть основная форма с именем " Form1 "(добавленная дизайнером) и форма, которую я упомянул в ОП, она называется" F", она создается кодом (Form F = new Form ()). Форма F является членом данных класса Form1. Теперь в любом месте класса Form1 я могу получить доступ к DoubleBuffered (this.DoubleBuffered), но это не то, что я хочу, я хочу сделать то же самое с формой F, но я не могу получить доступ к DoubleBuffered формы F, что мне делать?
Большое вам спасибо!
Sergey Alexandrovich Kryukov
Да, ты можешь!
Уэйн, ты прав, мой 5-й, но король мальчик запутался в доступе к этой функции, которая нуждается в объяснении.
Я ответил: "пожалуйста, посмотрите мое" дополнительное " решение.
--СА
BobJanova
Короткий ответ (читайте решение Сака для длинного): сделайте свою форму 'F' экземпляром производного класса и установите ControlStyle в конструкторе.
udhayaCSE from Chennai
Для меня это прекрасно работает
[no name]
Спасибо! Я думаю, что у меня может быть некоторая путаница с "защищенным", в Cpp я помню, что он устанавливает прямую связь между основанными и производными классами. Я подчеркиваю слово "прямой" и предполагаю, что в C#, если это так, мы не можем получить доступ к DoubleBuffered (защищенному свойству элемента управления классом) в классе, не производном от элемента управления классом, но на самом деле мы можем это сделать. Вот почему я могу думать, что "прямое отношение" не обитает в C#, не так ли?
Большое вам спасибо!
Рейтинг:
35
Sergey Alexandrovich Kryukov
Ответ на последующий вопрос:
Но я не могу получить доступ к этой охраняемой собственности.Ты можешь
всегда доступ и установка функции двойного буфера.
Для элементов управления (в том числе
Form
): не используйте предопределенное управление. Создайте производный класс и используйте его в своей форме вместо исходного. Воспользуйся
System.Windows.Forms.Control.SetStyle
. Добавьте стиль
System.Windows.Forms.ControlStyles.OptimizedDoubleBuffer | System.Windows.Forms.ControlStyles.AllPaintingInWmPaint
.
Что касается формы-о чем вы говорите? Вы уже используете класс, производный от
System.Windows.Forms.Form
, так что любые защищенные члены доступны для вас.
Тем не менее, подумайте о своем решателе проблем с мерцанием. Попробуй!
—СА
[no name]
Спасибо SA, вы еще раз выручайте меня! Ваша уловка заключалась в основном в том, чтобы помочь мне получить доступ к защищенному методу Control.SetStyle, как только я смогу это сделать, мерцание исчезнет. Но в данном случае я действительно не могу различить «частный» и «защищенный». Вроде они такие же. Как я думал раньше, «защищенный» означает, что любые объекты (например, моя форма «F») напрямую унаследованного класса (например, класса Form) смогут получить доступ к защищенным членам (например, DoubleBuffered или SetStyle) базового класса. (как класс Control). Я думаю, что класс Form не наследует Control напрямую (но сначала через ScrollableControl и ContainerControl), поэтому мы никогда не должны были иметь доступ к DoubleBuffered где-либо (но я могу сделать это в классе Form1, унаследованном от Form, с помощью this. DoubleBuffered "), я попытался создать новый объект Form1 и получить доступ к DoubleBuffered вне класса, но не смог. Вот почему я думаю, что «защищенный» в данном случае скорее похож на «частный»? Или мне не хватает некоторых знаний о модификаторе «защита»?
Большое спасибо за решение моей проблемы, а также тому, кто дает Решение 1!
Если вы не можете понять, что я хочу сказать, Пожалуйста, дайте мне знать, я опубликую некоторый код, чтобы сделать проблему более ясной!
Sergey Alexandrovich Kryukov
Нет, просто почитай об этом.
Private - только этот класс, Internal-добавляет все производные классы, public-доступ отовсюду, internal-то же, что public, но нет доступа из других сборок, internal protected-то же, что protected, но нет доступа из других сборок. 5 из них, все разные.
Теперь "форма не наследует контроль напрямую". Прямо или нет-это происходит от контроля. Для доступности прямо= = косвенно.
Это понятно? Я думаю, что понял все ваши проблемы здесь и решил их все. Теперь все ясно?
--СА
[no name]
Все модификаторы мне понятны, кроме "protected" (конечно, внутренняя защита-это комбинированное использование). Чтобы подтвердить то, что я узнал, я хотел бы привести пример. Предположим, что у меня есть 4 класса D, производных от C, C, производных от B, B, производных от A, и "a" является защищенным членом A. В C++ я узнал, что мы можем получить доступ только к "a" в классах A (конечно) и B. Мы не можем получить доступ к нему в классах C и D. Но в C# мы можем получить доступ к "a" во всех 4 классах.
Если вы не возражаете, Пожалуйста, подтвердите вышесказанное для меня?
Большое вам спасибо!
Sergey Alexandrovich Kryukov
Правильный. Напишите эти несколько строк кода, и вы увидите, что "а" доступно во всех классах. Не только в C# и не только в .NET, но, вероятно, и во всех ООП. Прямое или косвенное наследование - не имеет значения. Если подумать, это практически разумно. Как я уже сказал, для доступности, прямо= = косвенно.
--СА