2014-08-18 7 views
0

Привет У меня есть странная проблема с перерисованием с помощью элемента управления NumericUpDown. Если у меня есть другое управление в том же месте и установите его свойство Visible в false и Visible свойства NumericUpDown к true в NumericUpDown появляется без границ и частей другого элемента управления, видны в фоновом режиме (даже если его свойство Visible является false). Даже вызов Refresh из NumericUpDown или родительского контейнера ничего не изменит. Если элемент управления, находящийся в фоновом режиме, равен TextBox, отображается NumericUpDown, но я предполагаю, что это так, потому что граница равна, и поэтому она выглядит только как правильно нарисованная.Проблема с перерисованием с NumericUpDown

Является ли это ошибкой управления NumericUpDown? Как я могу это исправить?

Спасибо за помощь.

Редактировать: Вот скриншот. Я просто изменяю видимые свойства ComboBox и NumericUpDown в зависимости от свойств CheckedRadioButtons.

enter image description here

+0

Можете ли вы подготовить полную небольшую программу, чтобы продемонстрировать проблему? –

+0

Добавлен снимок экрана. Я приведу пример. –

+0

К сожалению, я не могу воспроизвести это с помощью простого примера. В простом winforms приложение работает правильно. В проверенном случае элементы управления находятся внутри 'GroupBox', который находится внутри' UserControl', который затем добавляется в 'Panel' или' Form' в другое время. Но до сих пор у меня не было никаких проблем с рисованием. Я заметил, что граница никогда не нарисована. Даже если не было никакого контроля, прежде чем «NumericUpDown» будет рисоваться без рамки, а также без белого фона. Он выглядит как ярлык с кнопками вверх и вниз. Не знаю, что вызывает это. –

ответ

1

Я, наконец, нашел проблему. Я использовал элемент управления overlay из CodeProject, который позволяет мне рисовать примитивы по всей моей форме. Несмотря на то, что я использую его редко, он все равно изменит порядок окраски детских элементов управления. В то время как другие элементы управления работают нормально, у NumericUpDown есть некоторые проблемы с этим.

Возможно, у кого-то будет такая же проблема в будущем. Поэтому здесь ссылка на проект CodeProject, который я использую: http://www.codeproject.com/Articles/26071/Draw-Over-WinForms-Controls.

1
private void button1_Click_1(object sender, EventArgs e) 
{ 
    Panel p = new Panel(); 
    p.Location = new Point(10, 10); 
    p.Height = 200; 
    p.Width = 200; 
    p.BorderStyle = BorderStyle.Fixed3D; 
    Controls.Add(p); 
    NumericUpDown nud = new NumericUpDown(); 
    nud.Location = new Point(150, 150); 
    nud.Height = 100; 
    nud.Width = 100; 
    Controls.Add(nud); 
    nud.BringToFront(); 
} 

для кода просто добавить:

numericUpDown1.BringToFront(); 

проблема в том, что вы добавили NumericUpDown на панель, но это не совсем внутри панели, и вы должны довести его до спереди, чтобы увидеть полный вид numericupdown.

вы можете сделать это даже без кода. просто делайте, как на фотографиях.

enter image description here enter image description here enter image description here

пожалуйста, дайте мне знать, если вы получите ответ.

+0

Спасибо, но ничего не изменилось. Вначале граница установлена ​​на «Fixed3D». Изменение этого параметра перед установкой свойства 'Visible' не влияет. Граница вообще не нарисована. –

+0

Привет Риддл. Спасибо за ваши усилия, но, к сожалению, «BringToFront» тоже не работает. Элемент управления рисуется (также спереди уже), но только частично. Граница отсутствует, несмотря на то, что установлен стиль границы. «GroupBox», где находится элемент управления, намного больше, чем в моем скриншоте, поэтому это не проблема. –

+0

@RobertS. это был единственный способ, которым я мог представить вашу проблему и решить, я думаю, что другая часть вашего кода выполняет это. потому что он отлично работает для меня, и вы можете проверить числовое обновление в новом проекте и увидеть, как он работает. –