Winform Control.Refresh - кепілденген синхронды?

WinForms Control.Refresh әдісін шақыру MSDN ішінде сипатталғандай:

Басқаруды клиенттің аумағын жарамсыз етеді және дереу және кез келген еншілес басқару элементтерін қайта өңдеңіз.

Қосылған дисплей күтілетін Control.OnPaint шақыруын жасамау үшін Control.Refresh пайда болмайтын көрінетін сканерлеу сигналдарын (тиімді түрде өзгерту мүмкіндігін) ауыстырған кезде орын алуы мүмкін үзіліссіз мәселе болып табылады. Қосымша ақпарат алу үшін бағдарламаны құрастырып жатырмын, бірақ бұл шынында да, егер бұл шын мәнінде дисплей сәтсіз болғанын анықтайтындықтан, OnPaint-ке шақырмау туралы шешім қабылдауға болатын болса, қызықтырады.

Бұл мен үшін екіталай көрінеді, және мен басқа шегуге арналған тапаншаны таба аламын деп күтемін, бірақ мен оны кездейсоқ орналастырдым, оны басқа біреу жабайы табиғатта көрді және оны өңдеуге қатысты бірқатар ұсыныстар бар.

1

1 жауаптар

Жоқ, кепілдік жоқ. Егер басқару элементінің экранға түсуі болмаса, ол бояу хабарын жанбайды.

Бірақ басқару элементі экранды қайтадан қосқаннан кейін, бояу хабары қайтадан өртенуі керек.

Debug ақпаратын бояуға тырысасыз ба? Егер басқару элементі экранда болмаса, сіз жаңару кезінде не күтесіз?

1
қосылды
@holtavolt Мен оны тексеруге тырыстым, бірақ таймер бояу оқиғасынан басқа ештеңе жасамайды, егер басқару экраны болса. OnMove, әрине, бірақ Paint емес.
қосылды автор LarsTech, көзі
@holtavolt Иә, мен онымен жұмыс істемеймін. Сіз не істейсеңіз де, бояу оқиғасында логика қоюға болмайды.
қосылды автор LarsTech, көзі
@holtavolt Сіздің тестілеу мақсатыңыз үшін экранның «артқа» формасын жылжыту керек деп ойламаймын. Міне менің өзгертулерім: pastebin.com/qkw9gcvH .
қосылды автор LarsTech, көзі
Рахмет - Мен мұны тексеруге және тексеруге арналған бірнеше эксперимент ойлап таптым, бірақ олар маған қарама-қайшы нәтижелер берді. Мен OnMove консоліне жазатын қарапайым пішінді жасап, Жаңартуды өшірдім. Сіз сипаттағандай, пішін экранда тұрғанда, Жаңарту (және OnPaint) өртенуін көремін. Егер оны экраннан жылжытсам (жоғарғы сол жақ және жылжу пернелерін пайдаланып) - Жаңарту пішіннің бір бөлігін қайта экранға шығармайынша атысты тоқтатады. Дегенмен, егер мен Таймерді жасасам және ол экранның сол жағына жылжытатын Пішіннің орнын өзгерткен жағдайда, жасаңыз OnMove/OnPaint оқиғаларын қабылдайды.
қосылды автор holtavolt, көзі
Жаңартуды OnMove бағдарламасы бар ма ()? Мен OnPaint-ті өшіруге әкеп соқтырады, тіпті егер экраннан тыс экран болса.
қосылды автор holtavolt, көзі
Біз не істейміз? Бұл әрдайым OnPaint ататын: pastebin.com/Jc6hnVef - Мен бояу оқиғасының логикасына келісемін.
қосылды автор holtavolt, көзі
Түпнұсқа себеп біздің командалық үлгісін іске асыру арқылы тереңірек шеңберлі мәселе болды. Алғашқы жауапыңыз бояуға кепілдік берілмегендіктен, дұрыс деп белгіленеді.
қосылды автор holtavolt, көзі