PDA

View Full Version : سوال: نوشتن Property , AutoSize برای یک یوزر کنترل



papeli_83
جمعه 13 مرداد 1391, 11:41 صبح
با سلام

من میخوام برای یوزر کنترلم پراپرتی اتوسایز بنویسم اما روششو بلد نیستم , از دوستان ممنون میشم با کد منو راهنمایی کنن

با تشکر

ali reza mansoori 2
جمعه 13 مرداد 1391, 14:25 عصر
دوست عزیز یکم بیشتر توضیح بده
یعنی میخوای یه چی تو مایع های لیبل باشه که مقدار تکس میگیره یا مثل PictureBox عکس بگیره
مشخص کن که بر چه اساسی میخوای اتوسایز بشه

papeli_83
جمعه 13 مرداد 1391, 15:10 عصر
ببین در اصل من دارم یه یوزر کنترل برای لیبل عمودی مینویسم
این هم کداش که اما مشکلی که دارم اینه که اتو سایز نداره
( در داخل یوزر کنترل یه کلاس به اسم VerticalLabel با کدهای زیر ایجاد می کنیم و برنامرو ران میکنیم ( هیچ لیبلی هم رو یوزر کنترل قرار نمی دیم ! ) )

Imports System
Imports System.ComponentModel
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing

Public Class VerticalLabel
Inherits System.Windows.Forms.Control
Private labelText As String
Private mAutoSize As Boolean
Public Sub New()
MyBase.New()

InitializeComponent()
End Sub

#Region " Windows Form Designer generated code "

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

Private components As System.ComponentModel.Container
Private Sub InitializeComponent()
Me.Size = New System.Drawing.Size(24, 100)
End Sub
#End Region

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim sngControlWidth As Single
Dim sngControlHeight As Single
Dim sngTransformX As Single
Dim sngTransformY As Single
Dim labelColor As Color
Dim labelBorderPen As New Pen(labelColor, 0)
Dim labelBackColorBrush As New SolidBrush(labelColor)
Dim labelForeColorBrush As New SolidBrush(Me.ForeColor)
MyBase.OnPaint(e)
sngControlWidth = Me.Size.Width
sngControlHeight = Me.Size.Height
e.Graphics.DrawRectangle(labelBorderPen, 0, 0, sngControlWidth, sngControlHeight)
e.Graphics.FillRectangle(labelBackColorBrush, 0, 0, sngControlWidth, sngControlHeight)

sngTransformX = 0
sngTransformY = sngControlHeight

e.Graphics.TranslateTransform(sngTransformX, sngTransformY)
e.Graphics.RotateTransform(270)
e.Graphics.DrawString(labelText, Font, labelForeColorBrush, 0, 0)
End Sub
Public Overrides Property Text() As String
Get
Return labelText
End Get
Set(ByVal Value As String)
labelText = Value
Invalidate()
End Set
End Property

sahand100
جمعه 13 مرداد 1391, 15:35 عصر
ببین در اصل من دارم یه یوزر کنترل برای لیبل عمودی مینویسم
این هم کداش که اما مشکلی که دارم اینه که اتو سایز نداره
( در داخل یوزر کنترل یه کلاس به اسم VerticalLabel با کدهای زیر ایجاد می کنیم و برنامرو ران میکنیم ( هیچ لیبلی هم رو یوزر کنترل قرار نمی دیم ! ) )

Imports System
Imports System.ComponentModel
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing

Public Class VerticalLabel
Inherits System.Windows.Forms.Control
Private labelText As String
Private mAutoSize As Boolean
Public Sub New()
MyBase.New()

InitializeComponent()
End Sub

#Region " Windows Form Designer generated code "

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

Private components As System.ComponentModel.Container
Private Sub InitializeComponent()
Me.Size = New System.Drawing.Size(24, 100)
End Sub
#End Region

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim sngControlWidth As Single
Dim sngControlHeight As Single
Dim sngTransformX As Single
Dim sngTransformY As Single
Dim labelColor As Color
Dim labelBorderPen As New Pen(labelColor, 0)
Dim labelBackColorBrush As New SolidBrush(labelColor)
Dim labelForeColorBrush As New SolidBrush(Me.ForeColor)
MyBase.OnPaint(e)
sngControlWidth = Me.Size.Width
sngControlHeight = Me.Size.Height
e.Graphics.DrawRectangle(labelBorderPen, 0, 0, sngControlWidth, sngControlHeight)
e.Graphics.FillRectangle(labelBackColorBrush, 0, 0, sngControlWidth, sngControlHeight)

sngTransformX = 0
sngTransformY = sngControlHeight

e.Graphics.TranslateTransform(sngTransformX, sngTransformY)
e.Graphics.RotateTransform(270)
e.Graphics.DrawString(labelText, Font, labelForeColorBrush, 0, 0)
End Sub
Public Overrides Property Text() As String
Get
Return labelText
End Get
Set(ByVal Value As String)
labelText = Value
Invalidate()
End Set
End Property




لطفا به این تاپیک پاسخ دهید:
http://barnamenevis.org/showthread.php?354606-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%AF%D8%B1-%D9%88%DB%8C-%D8%A8%DB%8C-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D8%9F

papeli_83
جمعه 13 مرداد 1391, 15:45 عصر
لطفا به این تاپیک پاسخ دهید:
http://barnamenevis.org/showthread.php?354606-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%AF%D8%B1-%D9%88%DB%8C-%D8%A8%DB%8C-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D8%9F

دوست عزیز من تازه کارم و بازی نوشتنم واسه تازه کارا خیلی سنگینه ( متاسفانه نمی تونم کمکتون کنم )