2013-07-19 2 views
2

Я работаю над этим настраиваемым контролем. (Я очень новичок в этой части программирования.) Я работаю над приложением, которое должно иметь возможность форматировать математические выражения, когда пользователь вводит ввод в свой собственный пользовательский элемент управления. Это, как я хочу, чтобы управление выглядеть (это изображение сделано в Photoshop):Ошибка пользовательского управления

enter image description here

Я не буду объяснять поведение я хочу его иметь, потому что это не поможет, но Идея заключается в том, что не основан ни на одном Windows Control.

Tis это код у меня уже есть:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace Support.Components 
{ 
    public partial class PartialExpressionEditor : Control 
    { 
     public PartialExpressionEditor() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnPaint(PaintEventArgs pe) 
     { 
      base.OnPaint(pe); 

      Brush background = Brushes.White; 
      pe.Graphics.FillRectangle(background, ClientRectangle); 
      background.Dispose(); 
     } 
    } 
} 

Когда я пытаюсь поставить его в моей форме, я получаю это диалоговое окно ошибки:

enter image description here

Где проблема? Или почему эта ошибка появляется?

+0

ваш класс показывает, что ваш элемент управления наследуется от 'Control', но почему вы сказали, что оно не основано на любом управлении Windows? –

+0

Кстати, ваш код кажется мне в порядке, за исключением того, что я буду использовать 'using (Brush background = Brushes.White) {....}' вместо вызова 'Dispose()' непосредственно, как вы это делали. Не могли бы вы попытаться удалить 'Dispose()' или хотя бы попробовать использовать стиль 'using'? –

+0

: «Это не основано на каких-либо элементах управления Windows», я имею в виду, что это не кнопка или текстовое поле, или флажок и т. Д. – Victor

ответ

2

Я думаю, что проблема в том, что вы избавляетесь системная щетка:

// background.Dispose(); 

, так как вы не создали его:

Brush background = Brushes.White; 

Чтобы использовать свою собственную кисть, вы располагаете себя:

using (SolidBrush br = new SolidBrush(Color.White)) { 
    pe.Graphics.FillRectangle(br, this.ClientRectangle); 
} 

Возможно, вам придется выйти из Visual Studio, чтобы получить кисть Brushes.White.

+0

Моя проблема не в том, что я запускаю приложение! Это происходит, когда я пытаюсь удалить элемент управления из формы из панели инструментов в VS2010. – Victor

+0

@Victor Не меняет мой ответ. Использование элемента управления в дизайнере будет запускать событие рисования. – LarsTech

+0

После вашего редактирования код работает! Большое спасибо! Теперь я могу ... начать писать свой контроль :)) – Victor

Смежные вопросы