PDA

View Full Version : سوال: فرق UserControl با UserControlای که با Class ساخته می شود چیست؟



forodo
چهارشنبه 04 دی 1392, 17:24 عصر
سلام
دو راه برای ساخت UserControl موجود است:
1- راست کلیک روی پروژه و زدن گزینه Add و زدن UserControll
2- راست کلیک روی پروژه و زدن گزینه Add و زدن گزینه Class که در این مورد مشخص می کنیم که کلاس ما از کدام کنترل ارث بری کند:

class Class1 : System.Windows.Forms.TextBox
{

}

تفاوت این دو یوزرکنترل در چیست؟

hmbarnamenevis
چهارشنبه 04 دی 1392, 18:22 عصر
در UserControl شما میتوانید از چند کنترل استفاده کنید و در نهایت یک ocx بسازید
در کلاس تمام کارها با نوشتن کد انجام می گیرد.
در UserControl شما از امکانات ویژوال استودیو برای کد نویسی روی اشیاء اضافه شده استفاده می کنید و همه چیز مثل طراحی و کد نویسی بر روی فرم است. فقط در نهایت خروجی آن خود یک کنترل و شی است.
وبلاگ http://MyProgrammingVB.blogsky.com

forodo
چهارشنبه 04 دی 1392, 18:50 عصر
در کلاس هم میشه رویداد برای یک کنترل نوشت؟
اگر می شه به چه شکل؟

hmbarnamenevis
چهارشنبه 04 دی 1392, 20:06 عصر
بله مثلا در این کد کلاس ما از TextBox ارث بری کرده و دو رویداد به آن اضافه کردیم:
public class Class1:System.Windows.Forms.TextBox
{
public Class1()
{
this.GotFocus += new EventHandler(Class1_GotFocus);
this.LostFocus += new EventHandler(Class1_LostFocus);
}

void Class1_LostFocus(object sender, EventArgs e)
{
//throw new NotImplementedException();
BackColor = System.Drawing.Color.White;
}

void Class1_GotFocus(object sender, EventArgs e)
{
//throw new NotImplementedException();
BackColor = System.Drawing.Color.Yellow;
}

}
البته باید system.windows.form و system.drawing را به پروژه خود Add کنید.
وبلاگ برنامه نویسی از پایه و اساس: http://MyProgrammingVB.blogsky.com

forodo
پنج شنبه 05 دی 1392, 13:20 عصر
GotFocus و LostFocus از کجا اومدند؟
توی رویداد تکست باکس همچین رویدادی به این نام پیدا نکردم!

توی اون سایت با VB توضیح داده شده که من بلد نیستم.

davidrobert
پنج شنبه 05 دی 1392, 13:40 عصر
فرق ابز ار UserControl ساختن این می باشد که ما بیام ابزاری بسازیم که ویژگی هلای خواصت بهش بدیم مثلا تکس باکس با UserControl بسازیم بعضی از خصوصیات رو از دست میدهد مثل پسوردچار ، و تعیین اندازه متن از دست میدهد از تکس ابزاری بخواهیم درست کنیم و تکس باکس که ساختید به صورت کتمپونت استفاده کنیم بعضی ویژگی ها رو ندارد.
اما
وقتی از Class بیام یک کامپوننت بسازیم مثلا همون تکس باکس میتوانیم کلی ویژگی به هش بدیم و همین طوری ویژگی های که خود تکس باکس رو دارد رو برنامه از دست نمی دهد چون برنامه اون ویژگی رو که به وسیله کلاس ساختیم نگهرمیدارد ولی به وسیله User Control ساختیم از دست میدهد
User Control در صورتی بدرد میخورد که بخواهیم چندین ابزار رو که با هم نیاز داریم کنار هم بیاریم و استفاده کنیم. که در کلاس این امکان نیست ولی در یوزر کونترول هستش.
این هستش فرق بین استفاده از 2 تا ابزار

davidrobert
پنج شنبه 05 دی 1392, 13:43 عصر
این هم رویداد نویسی در کلاس برای ساخت یک کامپوننت که امکان زدن Enter برای رفتن به کادر متن بعدی و عدد گرفتن فقط به وسیله رویداد کلاس
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;

namespace Canopy_Accounting_Software
{
class ClsTextBoxNumber : TextBox
{
protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
if (this.Text.Trim() == "")
this.BackColor = Color.Red;
else
this.BackColor = Color.White;
}

protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (e.KeyChar == 8)
{
return;
}
if (!System.Char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}

protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
if (this.Text != "")
this.BackColor = Color.White;
}
[DefaultValue(true)]
public bool TreatEnterAsTab { get; set; }

public ClsTextBoxNumber()
{
TreatEnterAsTab = true;
}
private const int WM_KEYDOWN = 0x100;
public override bool PreProcessMessage(ref Message msg)
{
if (TreatEnterAsTab && (!this.Multiline || this.AcceptsReturn) &&
Control.ModifierKeys == Keys.None &&
msg.Msg == WM_KEYDOWN && (Keys)msg.WParam.ToInt32() == Keys.Enter)
{
msg.WParam = (IntPtr)Keys.Tab;
}
return base.PreProcessMessage(ref msg);
}
}
}

forodo
پنج شنبه 05 دی 1392, 14:18 عصر
پس یعنی این کامپوننتهایی که ساخته میشه مثل تقویم شمسی یا ماشین حساب که به صورت یک کنترل ازش استفاده می شه با usercontrol هستش؟