Mohankumar.Engain Ответов: 2

Создание пользовательских элементов управления из стандартных элементов управления переопределяет свойства onpaint не работает его уважаемое свойство элемента управления?


Уважаемая Команда,

При создании пользовательских элементов управления я хочу переопределить некоторые значения свойств, такие как высота кнопки, ширина, шрифт и т. д., а также элементы управления label, textbox.
Но при переопределении события onPaint не работают все свойства при создании элементов управления button, label, textbox.

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

Теги: приложение windows,библиотека управления windows.

Что я уже пробовал:

При звонке переопределения метода onpaint событие, значение свойства не меняется, когда выполнить наш контроль.

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. Поэтому покажите нам код, который не работает, и попытайтесь объяснить, что он делает, чего вы не ожидали, или не делает того, что сделали вы.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Mohankumar.Engain

охраняемых переопределить недействительными метода onpaint(объект painteventargs е)
{
база.OnPaint(e);
Графика g = e.графика;
г. Прозрачный(Цвет Фона);
г. SmoothingMode = SmoothingMode.высококачественный;
Ручка p = новая ручка(цвет.Черный, 2);
Rectangle fillRect = новый прямоугольник(10, 10, 40, 40);
Кисть b = новая сплошная кисть(цвет.FromArgb(240, 240, 240));

//AutoSize = false;
г. FillRectangle(б fillRect);
//г. FillRectangle(новый SolidBrush(цвет.Черный), 100, 50, 100, 100);
г. Объекта drawrectangle(р, е.ClipRectangle);

g.DrawString(текст, новый шрифт ("Segoe UI", 10, FontStyle.Обычная), новая сплошная кисть(цветная.Черный), новая точка(4, 4));

b.Dispose(); //добавьте это
p.Dispose(); //добавьте и это тоже

}

Для вышеизложенного создана библиотека управления формами Windows => ,
Я использовал элемент управления button для изменения значений свойств пользовательского элемента управления.
Значения свойств ширина и высота кнопок не изменяются.

Ralf Meier

Прости, я тебя не застукал ...
Пожалуйста, объясните еще раз (возможно, на словах), чего вы хотите достичь ...

Mohankumar.Engain

Если попробовать приведенный выше код с помощью конструктора, то свойства, которые мы используем, эти свойства также отображаются в файле .designer.cs.Я хочу ограничить и это тоже. пожалуйста, если мы используем только переопределение, мы ограничим файл .designer.cs. но все равно не получаю ожидаемого результата ..

2 Ответов

Рейтинг:
1

Maciej Los

Все элементы управления в System.Windows.Form пространства наследует от Класс элемента управления[^].

Что это значит для вас?

Вы можете использовать что-то подобное, чтобы изменить некоторые свойства вашего пользовательского элемента управления:


public class MyCustomButton : Button
{
    public MyCustomButton()
    {
        this.Width = 180
	    this.Height = 64
	    this.Font = New System.Drawing.Font("Segoe UI", 10, System.Drawing.FontStyle.Regular)
	    this.Text = "My Custom Button"
    }
}

//usage:
MyCustomButton mcb = new MyCustomButton();
mcb.Location = new System.Drawing.Point(20, 20);
mcb.Parent = this; //Form

Public Class MyCustomButton
	Inherits Button
	
	Public Sub New()
		With Me
			.Width = 180
			.Height = 64
			.Font = New System.Drawing.Font("Segoe UI", 10, System.Drawing.FontStyle.Regular)
			.Text = "My Custom Button"
		End With
	End Sub
	
End Class

'usage:
Dim mcb As MyCustomButton = New MyCustomButton()
With mcb
    .Location = New System.Drawing.Point(20, 20)
    .Parent = Me 'Form
End With



Для получения более подробной информации, пожалуйста, смотрите:
Классы - Руководство По Программированию На C# | Microsoft Docs[^]
Разработка пользовательских элементов управления Windows Forms с помощью платформы .NET Framework | Microsoft Docs[^]


Рейтинг:
0

OriginalGriff

Цитата:
Я использовал элемент управления button для изменения значений свойств пользовательского элемента управления.
Значения свойств ширина и высота кнопок не изменяются.
Что ж... этот код не использует никаких переменных значений, кроме передаваемого вам ClipRectangle, который является общим размером области чертежа элемента управления. Все остальное там имеет постоянное значение, поэтому я бы не ожидал, что что-то изменится, если только ваш внешний код кнопки не изменяет фактическую ширину и высоту всего элемента управления.

Итак, что же делает ваш код кнопки, и какое влияние вы ожидали, что он окажет на ваш контроль?

Кстати: если вы используете a using блок, ваш Dispose вызывается для вас, когда объект выходит из области видимости:
using (Pen p = new Pen(Color.Black, 2))
    {
    Rectangle fillRect = new Rectangle(10, 10, 40, 40);
    using (Brush b = new SolidBrush(Color.FromArgb(240, 240, 240)))
       {
        g.FillRectangle(b, fillRect);
        g.DrawRectangle(p, e.ClipRectangle);
        using (Brush black = new SolidBrush(Color.Black))
            {
            using (Font myFont = new Font("Segoe UI", 10, FontStyle.Regular))
                {
                g.DrawString(Text, myFont, black, new Point(4, 4));
                }
            }
        }
    }
Но... Я бы создал их вне метода в частных статических переменных уровня класса, так что всегда создается только один из них - это сэкономит время в вашем методе Paint, что очень важно, так как это влияет на общую производительность вашего приложения. И их вообще не нужно утилизировать, так что никаких утечек дескрипторов, как это было в вашем коде!


Mohankumar.Engain

Если попробовать приведенный выше код с помощью конструктора, то свойства, которые мы используем, эти свойства также отображаются в файле .designer.cs.Я хочу ограничить и это тоже. пожалуйста, если мы используем только переопределение, мы ограничим файл .designer.cs. но все равно не получаю ожидаемого результата ..