PDA

View Full Version : سوال: میخوام کامپوننت در Toolbox نمایش داده نشود (همراه عکس)



gilsoft
جمعه 10 آذر 1391, 13:56 عصر
سلام دوستان

من میخوام این کامپوننت OleDb در پنجره Toolbox نمایش داده نشود (عکس شماره 1) :چشمک:

95815

از کدی که در عکس 2 آمده هم استفاده کردم .. اما تاثیری نداشت :افسرده:

آیا راهی برای پنهان کردن وجود دارد ؟ :متفکر:

xxnagin
جمعه 10 آذر 1391, 16:26 عصر
سلام
browsable برای اینه که property (مثلا filename openfiledialog که در پروپرتی هست که پروپرتی read only ها ی شده را نمایش نمیده) در پروپرتیس بتونی نمایشش بدی اگه true باشه نمایش داده میشه و false باشه برعکس
از Inherits Component در Imports System.ComponentModel استفاده کن

Imports System.ComponentModel
public class Component1
Inherits Component
end class

swallow.pa
جمعه 10 آذر 1391, 17:27 عصر
دوست من يكسوال برام پيش اومده هدفت از نمايش ندادن اون كامپونت توي محيط تولباكس چيه :متعجب:

gilsoft
جمعه 10 آذر 1391, 18:30 عصر
دوست من يكسوال برام پيش اومده هدفت از نمايش ندادن اون كامپونت توي محيط تولباكس چيه :متعجب:

سلام دوست عزیز

این کامپوننت برای خواندن Caption های بانک Access بصورت اتوماتیک و آوردن آنها توی DataGridView میباشد ( رویای یکساله من که به حقیقت نزدیک شد) ... نیازی نمی بینم که تو Toolbox باشه .. جون مال کدنویسی هستش

هر وقت تکمیل شد .. تو همین تالار میزارم که سایر دوستان هم بتونند استفاده کنند ... چون همه رو با راهنمایی همین دوستان عزیزم نوشتم

gilsoft
جمعه 10 آذر 1391, 20:45 عصر
سلام
browsable برای اینه که property (مثلا filename openfiledialog که در پروپرتی هست که پروپرتی read only ها ی شده را نمایش نمیده) در پروپرتیس بتونی نمایشش بدی اگه true باشه نمایش داده میشه و false باشه برعکس
از Inherits Component در Imports System.ComponentModel استفاده کن

Imports System.ComponentModel
public class Component1
Inherits Component
end class


سلام دوست عزیز

ممنون که جواب دادین

اما با این کد شما مشکل حل نشد !

فرید نجفلو
شنبه 11 آذر 1391, 01:44 صبح
سلام
تا اونجایی که من می دونم اگه کلاس شما به صورت مستقیم یا غیر مستقیم از Component مشتق شده باشه به صورت اتوماتیک تو جعبه ابزار نشون داده میشه
اگه کلاس شما فقط مجموعه ای از توابع هست (اینترفیس نداره) اون رو از این کلاس مشتق نکنید
اگه کلاس شما داری رابط کاربری(اینترفیس) هست یا قابل اضافه کردن به فرم (با درگ دراپ) اصولا باید تو Toolbox ظاهر بشه

gilsoft
شنبه 11 آذر 1391, 02:22 صبح
اگه کلاس شما فقط مجموعه ای از توابع هست (اینترفیس نداره) اون رو از این کلاس مشتق نکنید

سلام دوست عزیز
کلاس فقط مجموعه ای از توابع هست ... اما من از کلاس مشتق سر در نمیارم ! (یعنی نمیدونم مشتق و غیر مشتق چی هست :خجالت: )

اگه برات امکان داره یه راهنمایی (اگه یه مثال کوچولو هم داشته باشه که عالی میشه) بکن .. تا من از این سر در گمی در بیام ....

فرید نجفلو
شنبه 11 آذر 1391, 12:48 عصر
شما در حالت کلی دوتا حالت دارید

1:
کلاس (کنترل شما) از طریق دیزاینر می تونه به فرم اضافه بشه (از Toolbox رو فرم انداخته بشه):
در این صورت کلاس شما تو Toolbox دیده می شه و معمولا از System.Windows.Forms.Control یا System.ComponentModel.Component مشتق می شن
حالا فرق این دوتا:
کلاسی که از System.Windows.Forms.Control مشتق شده باشه داری رابط کاربری بوده و بروی خود فرم مشاهده میشه مثل کنترل Lable
کلاسی که از System.Windows.Forms.Component یمشتق شده باشه داری رابط کاربری نبوده و در قسمت پایین دیزاینر دیده میشه مثل کمپوننت Timer

نمونه کد مشتق شدن (بحث توارث) :
بدون اینترفیس(رابط کاربری)

Public Class MyComponent
Inherits System.ComponentModel.Component


با اینترفیس

Public Class UserControl
Inherits System.Windows.Forms.UserControl


حالا اگه کلاس شما به یکی از دو طریق بالا یا مشابه اون باشه تو Toolbox دیده میشه

2:
کلاس شما مجموعه ای کد (توابع و متد و ... ) بوده و فقط در کد نویسی استفاده میشه:
این معمولا یه کلاس مستقل هست (مشتق شدن اون از یه کلاس دیگه کمتر دیده میشه ولی غیر ممکن نیست!)
برای مثال شما اگه کلاسی به اسم OleDb داشته باشید (که فکر نکنم اسم مناسبی باشه اونم به علت وجود یه Namespce همنام در دات نت) ممکنه کدی شبیه این بتویسید:

Public Class OleDb
Public Function GetCaptions(TableName As String) As String()
'...
End Function
'...
End Class



Dim MyOleDb As New OleDb
Dim Captions=MyOleDb.GetCaptions("Table1")
'...


تو این حالت شما نیازی به نشون داده شدن تو Toolbox ندارید (رابط کاربری هم همین طور) پس کلاس شما بدون Inherits(حداقل از Component) نوشته میشه

_______________________________________________
حالا مشکل احتمالی شما:
طبق تصویر کلاس شما از از جایی ارث بری نداره ولی ممکنه واقعیت این نباشه!
بنده احتمال می دم شما به علت گذاشتن اسم کمپوننت رو کلاس خودتون (که همون طور در بالا گفتم مفهوم اون در دات نت فرق می کنه) در هنگام ایجاد کلاس خودتون ، از پنجره Add New Item گزینه Component Class رو به جای Class انتخاب کردید
اگه اینطوره کد ها رو به جای دیگه کپی کلاس فعلی رو انتخاب و دوباره کلاسی با نوع مناسب (Class) اضافه و کدها رو دوباره وارد کنید (راحترین روش)
اگه می خواید مطمئن بشد از قسمت بالای Solution Explore دکمه Show All Files (بدون متن و کنار دکمه رفرش) رو بزنید حالا شما یه فایل دیگه زیر کلاس اصلی می بینید که به Designer.vb ختم میشه اگه کد اون رو باز کنید خط مشتق شدن رو می بینید (Inherits )

gilsoft
شنبه 11 آذر 1391, 14:55 عصر
2:
کلاس شما مجموعه ای کد (توابع و متد و ... ) بوده و فقط در کد نویسی استفاده میشه:
این معمولا یه کلاس مستقل هست (مشتق شدن اون از یه کلاس دیگه کمتر دیده میشه ولی غیر ممکن نیست!)
برای مثال شما اگه کلاسی به اسم OleDb داشته باشید (که فکر نکنم اسم مناسبی باشه اونم به علت وجود یه Namespce همنام در دات نت) ممکنه کدی شبیه این بتویسید:

Public Class OleDb
Public Function GetCaptions(TableName As String) As String()
'...
End Function
'...
End Class



Dim MyOleDb As New OleDb
Dim Captions=MyOleDb.GetCaptions("Table1")
'...


تو این حالت شما نیازی به نشون داده شدن تو Toolbox ندارید (رابط کاربری هم همین طور) پس کلاس شما بدون Inherits(حداقل از Component) نوشته میشه


سلام دوست خوب من

ممنونم از توضیحات کامل شما ... :تشویق: :قلب: :بوس: :خجالت: :لبخندساده:

همانطور که شما فرمودید .. این کلاس فقط برای کدنویسی نوشته شده .. و من باشتباه اونو کامپوننت کلاس معرفی کردم !

فقط یه سوال دیگه دارم اینه که : تو این کلاس چند تا Property دارم .. حالا میخوام بدونم که این کلاس .. کلاس حساب میشه یا کامپوننت کلاس ؟ :متفکر:

Mani_rf
شنبه 11 آذر 1391, 15:16 عصر
فقط یه سوال دیگه دارم اینه که : تو این کلاس چند تا Property دارم .. حالا میخوام بدونم که این کلاس .. کلاس حساب میشه یا کامپوننت کلاس ؟ :متفکر:

تعریف کامپاننت و کلاس به کد هایی که درون آن نوشته می شود ارتباطی ندارد. به نحوه عملکرد آن ارتباط دارد. معمولا کامپاننت ها ابزار هایی هستند که کاربر به صورت مستقیم با آنها ارتباط برقرار می کند. اما کلاس ها فقط در اختیار برنامه نویس قرار دارند.

موفق باشید