PDA

View Full Version : سوال: ساخت ابزار های جدید



akbar3070
پنج شنبه 28 دی 1391, 09:50 صبح
سلام
من می خوام یک برنامه بسازم که نیاز به button ها ، textbox ها ، groupbox ها و .... های خاص خودش رو داره ، می خواستم اگه بشه شما دوستان کمی به من کمک کنید که برای ساخت این ابزار ها چه کار هایی باید انجام بدم ؟!
ممنون از تمامی کسانی که به بنده کمک می کنند !

the king
پنج شنبه 28 دی 1391, 11:57 صبح
سلام
من می خوام یک برنامه بسازم که نیاز به button ها ، textbox ها ، groupbox ها و .... های خاص خودش رو داره ، می خواستم اگه بشه شما دوستان کمی به من کمک کنید که برای ساخت این ابزار ها چه کار هایی باید انجام بدم ؟!
ممنون از تمامی کسانی که به بنده کمک می کنند !

منظورتون از خاص چیه؟ شما به هر حال یک کلاس خواهید ساخت، حالا یا تفاوت هایی که می خواهید ایجاد کنید زیاده یا کم. اگر کم باشه از همون کنترل استاندارد
مثل GroupBox ارث بری خواهید کرد و اگر تفاوت ها زیاد باشه و یا کنترل اصلی اجازه مواردی رو نده، بجای کنترل اصلی از Control ارث بری خواهید کرد که مبنای
تمام کنترل ها است و دیگه دست تون برای هر موردی بازه، البته کد نویسی تون بیشتر میشه.

این دو تا هر دو یک جور GroupBox اند، اما اولی دقیقا مشابه GroupBox استاندارد است :

Public Class YourGroupBox
Inherits System.Windows.Forms.GroupBox

End Class


کنترل هایی هستند که می توان کنترل های دیگری را داخل شان قرار داد. یعنی ویرایشگر فرم بهشان این قابلیت را اضافه می کند.
این کنترل ها باید خصوصیت ParentControl داشته باشند، برای دسترسی به ParentControlDesigner حتما در پروژه
System.Design را بصورت Reference اضافه کنید، منوی Project گزینه Add Reference

Imports System.ComponentModel
Imports System.Windows.Forms.Design

<Designer(GetType(ParentControlDesigner))> _
Public Class YourGroupBox
Inherits System.Windows.Forms.Control

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim textSize As SizeF = e.Graphics.MeasureString(Me.Text, Me.Font)
e.Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), 5, 0)
Dim rgn As New Region(Me.ClientRectangle)
rgn.Exclude(New Rectangle(New Point(5, 0), textSize.ToSize()))
e.Graphics.Clip = rgn
e.Graphics.DrawRectangle(SystemPens.WindowFrame, 0, textSize.Height \ 2, Me.Width - 1, Me.Height - textSize.Height \ 2 - 1)
e.Graphics.DrawRectangle(SystemPens.WindowFrame, 2, textSize.Height \ 2 + 2, Me.Width - 5, Me.Height - textSize.Height \ 2 - 5)
End Sub

Protected Overrides ReadOnly Property DefaultSize() As System.Drawing.Size
Get
Return New Size(100, 50)
End Get
End Property
End Class

akbar3070
پنج شنبه 28 دی 1391, 13:08 عصر
ممنون از راهنمای شما
من این کلاس هارو کجا باید بنویسم که مثل button که ما از لیست انتخاب می کنیم و در form در محل دلخواه قرار می دیم و باشه ، و سوال بعدی اینکه این groupbox های که شما گفتی رو کجا باید بنویسم تا بتونم ازشون استفاده کنم ؟!

the king
پنج شنبه 28 دی 1391, 17:59 عصر
ممنون از راهنمای شما
من این کلاس هارو کجا باید بنویسم که مثل button که ما از لیست انتخاب می کنیم و در form در محل دلخواه قرار می دیم و باشه ، و سوال بعدی اینکه این groupbox های که شما گفتی رو کجا باید بنویسم تا بتونم ازشون استفاده کنم ؟!

شما اول یک کلاس جدید به پروژه اضافه کنید (منوی Project، گزینه Add Class)
هر چی داخل اون فایل کلاس هست پاک کنید و فرضا اون نمونه کد اولی که نوشتم رو جایگزین اش کنید.
حالا پروژه رو یکبار کامپایل کنید، پروژه تون باید بدون خطا کامپایل بشه.
حالا در Toolbox ویژوال استدیو، بالا اولین گروه کنترل های مربوط به خود پروژه شما است و اون کنترل جدید
که داخل کلاس ساخته اید آماده استفاده است. شما هر بار که یک کلاس جدید بسازید که قابل درج در فرم باشه
(چه به عنوان Control داخل فرم و چه به عنوان Component یا کلاس های عادی در پایین فرم)، کافی است که
یکبار پروژه تون بدون خطا کامپایل بشه تا در Toolbox مربوط به پروژه تون لیست بشوند.

akbar3070
پنج شنبه 28 دی 1391, 18:48 عصر
و باز هم تشکر
اما برای نوشتن این ابزار ها باید نکات و قواعد خاصی رو رعایت کنیم ؟؟!
و این نکات چی هستند ؟
و برای چه منظور باید رعایت کنیم ؟
و این نمونه کد دومی شما ارور میده !

the king
پنج شنبه 28 دی 1391, 19:39 عصر
و باز هم تشکر
اما برای نوشتن این ابزار ها باید نکات و قواعد خاصی رو رعایت کنیم ؟؟!
و این نکات چی هستند ؟
و برای چه منظور باید رعایت کنیم ؟

خیلی اصول و قواعد داره، خودش یک شاخه از برنامه نویسی یه. یکسری شون اصول طراحی واسط کاربری ئه
که بیشتر از دید راحتی کاربر و استاندارد طراحی ویژوال ئه و بقیه اصول و قواعدی که مربوط به ویژگی های
خاص ویندوز و Net. ئه.



و این نمونه کد دومی شما ارور میده !

عرض کرده بودم، System.Design اگه تو پروژه تون اضافه نشده باشه، ParentControlDesigner رو پیدا نمی کنه و قابل دسترسی نیست.
باید اضافه اش کنید تا قابل کامپایل بشه.

akbar3070
جمعه 29 دی 1391, 14:40 عصر
ممنونم
آها میشه کمی در این باره توضیح دهید و آموزش کوچیکی که من بتونم نیازم رو برطرف کنم ؟!
من چه جوری باید system.design رو اضافه کنم ؟!

the king
جمعه 29 دی 1391, 16:22 عصر
ممنونم
آها میشه کمی در این باره توضیح دهید و آموزش کوچیکی که من بتونم نیازم رو برطرف کنم ؟!
من چه جوری باید system.design رو اضافه کنم ؟!
با دقت نمی خوانید، نوشته بودم، در ویژوال استدیو، منوی Project گزینه Add Reference را انتخاب کنید.
در لیست اش System.Design هست. انتخاب اش می کنید و دکمه OK را فشار می دهید.

akbar3070
دوشنبه 16 بهمن 1391, 16:58 عصر
معذرت می خوام اخه پیداش نکردم . درسته !
می شه اصول اصلی که باید رعایت بشه و قاعده این رو برای مختصر شرح بدید ؟! ممنون می شم !