PDA

View Full Version : سوال: ساخت Prop



Mahdi1001
پنج شنبه 07 خرداد 1388, 19:42 عصر
سلام چطوری میشه یه پراپرتی مثل پراپرتی Size , Padding , Location , ... ساخت . یعنی پراپرتی که خودش از چند قسمت تشکیل شده وبتواند چند مقدار بگیرد .اگه لطف کنید کمکم کنید ممنون میشم واسه .

tdkhakpur
پنج شنبه 07 خرداد 1388, 20:28 عصر
سلام:
اگه برای کلاس طراحی شده خودتون میخوایید چه لزومی برای این کار دارید.
ولی برای ساخت کامپونت شخص لازم دارید باید بگم شما احتیاج دارید به نوشتن اجباری توابع get و set برای پراپرتی که در قسمت visual کلاس کلاس.
اگه مشکلی هست با کد کلاس مربوطه ارسال کن.

Mahdi1001
پنج شنبه 07 خرداد 1388, 23:54 عصر
public struct Point
{
private int X1, X2, Y1, Y2;
public Point(int x1, int x2, int y1, int y2)
{
X1 = x1;
X2 = x2;
Y1 = y1;
Y2 = y2;
Jahat = Samt.Horz;
}
public int XS
{
get { return X1; }
set { X1 = value; }
}
public int XF
{
get { return X2; }
set { X2 = value; }
}
public int YS
{
get { return Y1; }
set { Y1 = value; }
}
public int YF
{
get { return Y2; }
set { Y2 = value; }
}
public Samt Tile
{
get
{
return Jahat;
}
set
{
Jahat = value;
}
}
private Samt Jahat;

}

Mahdi1001
جمعه 08 خرداد 1388, 01:35 صبح
اگه کسی بلد لطف کنین کمکم کنید خیلی فوری .
خودم پراپرتی ساده که مثل مثالهای بالا واستون اوردم بلدم اما پراپرتی مثل پراپرتی Size , Padding , Location , ... که خودش از چند قسمت تشکیل شده وبتوانند چند مقدار بگیرن رو بلد نیستم .

Mahdi1001
جمعه 08 خرداد 1388, 13:25 عصر
چی شد ؟ یعنی هیشکی نیست جواب سوالمو بده یا سوالم خیلی تخصصی!!!!

tdkhakpur
جمعه 08 خرداد 1388, 14:08 عصر
سلام
شما برای کلاس خودتون پراپرتی ویژال نمیتونی بسازید اگه هم ساختیت به دردتون نمیخوره.
با این همه حال یه سر نخ بهتون بدم از کلمه کلیدی _Property برای ساحت خصوصیت استفاده کنید.
بهتره یری به helpدر مورد این کلمه کلیدی بزنید.
موفق باشید.

Mahdi1001
جمعه 08 خرداد 1388, 14:21 عصر
با این همه حال یه سر نخ بهتون بدم از کلمه کلیدی _Property برای ساحت خصوصیت استفاده کنید.
:عصبانی::عصبانی++::عصبانی:
اه خنگ که نیستم اول کدم نگا میکردی میگم پراپرتی ویژوالی ساختم اما پراپرتی که مثل , ... که خودش از چند قسمت تشکیل شده وبتوانند چند مقدار بگیرن رو بلد نیستم.

Sajjad.Aghapour
جمعه 08 خرداد 1388, 17:25 عصر
فکر کنم منظورتون اینه.....


//other class for define MyClass
public class MyClass
{
private int width, height;

public MyClass() { }
public MyClass(int _width, int _height)
{
width = _width;
height = _height;
}
public MyClass(Size size)
{
width = size.Width;
height = size.Height;
}

public int Width
{
get { return width; }
set { width = value; }
}
public int Height
{
get { return height; }
set { height = value; }
}
}

//main class for define property
private MyClass _p;
public MyClass p
{
get { return _p; }
set { _p = value; }
}

//using the property in derived classes
this.p = new MyClass(10, 10);
this.Text = p.Height.ToString();

Mahdi1001
جمعه 08 خرداد 1388, 17:36 عصر
خودمم فکر میکنم باید مثل شما کلاس بگیرم یا استراکت اما از هیچکودومش جواب نگرفتم .
اره فکر کنم شما درست متوجه شدین اما من کدی که دادین تست کردم اما جواب نداد شما خودتون ازش جواب گرفتین ؟

Sajjad.Aghapour
جمعه 08 خرداد 1388, 18:50 عصر
خوب من داخل comment هر بخش نوشتم که کجا باید استفاده بشه(البته اگه همه رو هم یه جا استفاده کنید جواب میده ولی چون شما مثال Location و .. زدید طوری بهتون میگم که خود vs استفاده میکنه)....
کلاس MyClass که یک کلاس کلی هستش(مثل همون کلاس Point).....
پروپرتی p یک پروپرتی هست که در کلاس پایه استفاده میشه(مثل location که در کلاس پایه Form استفاده شده)....
و آخرین بخش از کد که مقدار دهی و استفاده از نتیجه هستش در کلاس مشتق شده استفاده میشه(مثل همون چیزی که در یک فرم مثل Form1 که از Form ارث بری میکنه ،استفاده میشه).....
.....
حالا من نمی دونم اینکه شما میگید جواب نگرفتم ،مشکلتون چیه......

Mahdi1001
جمعه 08 خرداد 1388, 18:57 عصر
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Design;
using System.Drawing;
using System.Windows.Forms;

namespace Test_Prop
{
public partial class UserControl1 : ComboBox
{
private MyClass _p=new MyClass(2,4);
public MyClass p
{
get { return _p; }
set { _p = value; }
}
}
public class MyClass
{
private int width, height;

public MyClass() { }
public MyClass(int _width, int _height)
{
width = _width;
height = _height;
}
public MyClass(Size size)
{
width = size.Width;
height = size.Height;
}

public int Width
{
get { return width; }
set { width = value; }
}
public int Height
{
get { return height; }
set { height = value; }
}
}
}


file:///C:/Documents%20and%20Settings/Mahdi/My%20Documents/My%20Pictures/P.bmp

این کدم اینم شکلی که نشون میده اجازه تغییر یا حتی نمایش مغادیر رو نمیده

Mahdi1001
جمعه 08 خرداد 1388, 18:59 عصر
ببخشید اینم عکسش

HamidNazari
جمعه 08 خرداد 1388, 21:51 عصر
ببینم منظورت یه چیزی مثل اینه ؟

http://i40.tinypic.com/w8xmbp.jpg

اگه می خوای همچین چیزی درست کنی ، بدون که زیاد هم چیز ساده ای نیست و وقتت رو خواهد گرفت .

آپدیت : پروژهء مربوط به عکس رو اضافه کردم .
فرض کنید یه آبجکتی (مثلا مکعب) داریم که باید پراپرتی Locationش از جنسی باشه که دارای سه مولفه X و Y و Z هست . پس در وهله اول یه Struct به نام Vector3 خواهیم داشت و بعد باید Converterش رو پیاده سازی کرد که من اسم کلاسش رو گذاشتم Vector3Converter.
فقط حواستون باشه اگه خواستین تو پروژه خودتون استفاده کنین Revision Number مربوط به Assembly Version پروژه رو به * تغییر بدین . مثلا بشه * 0 0 1

Mahdi1001
جمعه 08 خرداد 1388, 22:13 عصر
اره دقیقا همین میتونید راهنماییم کنید.

Mahdi1001
جمعه 08 خرداد 1388, 23:49 عصر
میشه بیشتر راجبع کانورتور توضیح بدین دقیقا چیکا میکونه همه توابع ان استفاده میشه میخوام بفهمم دقیقا چیکار میکنه

اگه بتونین کار هر تابع رو بگید خیلی عالی میشه

ASKaffash
شنبه 09 خرداد 1388, 09:42 صبح
سلام
بالای کلاس این دستور را اضافه کن :

[TypeConverter(typeof(ExpandableObjectConverter))]
public class TableList
{

و using آن هم :
using System.ComponentModel;

Sajjad.Aghapour
شنبه 09 خرداد 1388, 18:37 عصر
بله همون طور که دوست خوبم ASKaffash گفتن باید از attribute ها استفاده کنید.من آموزشش رو تو یکی از قسمت های دات نت دیدم.دنبالش بگردید پیداش می کنید...

Mahdi1001
یک شنبه 10 خرداد 1388, 19:37 عصر
راستی منظورت از attribute چیه بیشتر توظیح میدی ؟

Sajjad.Aghapour
یک شنبه 10 خرداد 1388, 19:44 عصر
راستی منظورت از attribute چیه بیشتر توظیح میدی ؟



[TypeConverter(typeof(ExpandableObjectConverter))]

Mahdi1001
یک شنبه 10 خرداد 1388, 20:08 عصر
یعنی کلاس کانورتوری که نوشته بودن هیچ ربطی به کامپوننت نداره و واسه ساخت این پراپرتی فقط این یه خط کافیه ؟

Mahdi1001
دوشنبه 11 خرداد 1388, 03:14 صبح
می شه بگین من کجا اشتباه کردم که بازم جواب نمیده ؟


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Design;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
namespace Test_Prop
{
[TypeConverter(typeof(MyClass))]
public partial class UserControl1 : ComboBox
{
private MyClass _p=new MyClass(2,4);
/// <summary>
/// Property P Set and Get Size
/// </summary>
public MyClass p
{
get { return _p; }
set { _p = value; }
}

/// <summary>
/// Function Test for Test
/// </summary>
public void test()
{
int x;
x = 0;
}
}
public class MyClass
{
private int width, height;

public MyClass() { }
public MyClass(int _width, int _height)
{
width = _width;
height = _height;
}
public MyClass(Size size)
{
width = size.Width;
height = size.Height;
}

public int Width
{
get { return width; }
set { width = value; }
}
public int Height
{
get { return height; }
set { height = value; }
}
}
}

ASKaffash
دوشنبه 11 خرداد 1388, 09:07 صبح
[TypeConverter(typeof(MyClass))]
public class MyClass

esmaeily-hosein
دوشنبه 11 خرداد 1388, 11:25 صبح
به قسمت PersianDateConverter توجه کن . پروپرتی Value اون .
http://barnamenevis.org/forum/showpost.php?p=724086&postcount=243

اگر توضیح بیشتر خواستی بگو توضیح کامل راجبش بهت بدم .

Mahdi1001
دوشنبه 11 خرداد 1388, 22:19 عصر
ببخشید من این توری نوشتم اما بازم درست نشد.


using System.ComponentModel;
namespace Test_Prop
{
public partial class UserControl1 : ComboBox
{
private MyClass _p=new MyClass(2,4);
public MyClass p
{
get { return _p; }
set { _p = value; }
}

public void test()
{
int x;
x = 0;
}
}
[TypeConverter(typeof(MyClass))]
public class MyClass
{
private int width, height;

public MyClass() { }
public MyClass(int _width, int _height)
{
width = _width;
height = _height;
}
public MyClass(Size size)
{
width = size.Width;
height = size.Height;
}

public int Width
{
get { return width; }
set { width = value; }
}
public int Height
{
get { return height; }
set { height = value; }
}
}
}

ASKaffash
سه شنبه 12 خرداد 1388, 11:47 صبح
سلام
این کد روی کامپیوتر من کار میکند :


public partial class UserControl1 : ComboBox
{
private MyClass _p = new MyClass(2, 4);
public MyClass p
{
get { return _p; }
set { _p = value; }
}
public void test()
{
int x;
x = 0;
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class MyClass
{
private int width, height;
public MyClass() { }
public MyClass(int _width, int _height)
{
width = _width;
height = _height;
}
public MyClass(Size size)
{
width = size.Width;
height = size.Height;
}
public int Width
{
get { return width; }
set { width = value; }
}
public int Height
{
get { return height; }
set { height = value; }
}
}

Mahdi1001
سه شنبه 12 خرداد 1388, 14:22 عصر
ببخشيد یعنی متونید به پراپرتی P مقدار بدین به صورت ویژوال ؟
اگه می تونید پس موشکل من چیه ؟:عصبانی++:

SMRAH1
سه شنبه 12 خرداد 1388, 19:05 عصر
سلام

دوست من،اگر کمی دقت می کردی،تا حالا با همین پست های توی این صفحه به جواب رسیده بودی.با این حال دوباره توضیحات دوستان رو به صورت جمع شده تکرار می کنم.

برای اینکه یک property یا خصوصیت ،خودش دارای زیر مجموعه بشه باید «نوعش» این رو پشتیبانی کنه.به عبارت دیگه در کد پست 25،خصوصیت P از نوع کلاس MyClass است و این کلاس باید اجازه این کار رو بده.
حالا چطور؟باید یک Attribute برای این کلاس استفاده کنی به شکل زیر:

[TypeConverter(typeof(AAA))]
که AAA خودش باید یک کلاس مشتق شده از ExpandableObjectConverter باشد.در کد پست 25 ،عینا از کلاس ExpandableObjectConverter اسنتفاده شده که باعث میشه شما بتونید داده ها رو ببینی ولی نمی تونید ویرایش کنید.دلیل عدم ویرایش خیلی ساده است،
« برنامه باید چطور ویرایش رو تفسیر کنه؟»
این همون دلیلی است که شما حتما باید کلاسی از ExpandableObjectConverter مشتق کنید و بعد اون رو به عنوان خصوصیت کلاس MyClass معرفی کنید.در این پیاده سازی شما به دات نت یاد آوری می کنید که چطور داده ها رو نمایش بده و پردازش کنه.
حالا یک سئوال : برای مشتق کردن کلاس از ExpandableObjectConverter چه کار باید کرد؟
برای این منظور بهترین کار استفاده از یک مثال است.در کد 23 یک لینک برای برنامه ای که دارای پیاده سازی از ExpandableObjectConverter است داده شده.کافی اون برنامه رو مرور کنید و ببینید چکار کرده (دقیقا پیاده کلاس PersianDateConverter و نحوه استفاده در PersianDate).
همین

موفق باشی

Mahdi1001
سه شنبه 12 خرداد 1388, 19:28 عصر
از تمام دوستان متشکرم .
کاملا متوجه شدم اشتباهم چی بود.
بازم ازتون ممنونم.

Sajjad.Aghapour
سه شنبه 12 خرداد 1388, 19:52 عصر
اگه اون کلاس یه خورده سنگینه این مثال رو ببینید

Mahdi1001
سه شنبه 12 خرداد 1388, 21:25 عصر
ببخشید
کسی اطلاع داره که چجوری میشه کامنت بزاری که تو پروژه دیده بشه؟
یعنی حالا که این پراپرتی ساختم وقتی به پروژه اضافه میکنم روی این پراپرتی برم توضیحاتی که نوشتم باید .
مثل توضیحات خود سی شارپ.

Sajjad.Aghapour
سه شنبه 12 خرداد 1388, 22:58 عصر
/// <summary>
/// Get or set size of control
/// </summary>
[TypeConverter(typeof(convert))]
[Description("Get or set size of control")]
public MyClass P
{
get { return p; }
set { p = value; }
}

قسمت قرمز رنگ برای نشان دادن توضیحات موقع استفاده از کد و قسمت آبی رنگ برای موقعی است که در قسمت Properties پراپرتی P رو تغییر میدید.....

Mahdi1001
سه شنبه 12 خرداد 1388, 23:16 عصر
من این کد نوشتم اما جواب نداد
لطفا کمکم کنید.


namespace Test_Prop
{
public partial class UserControl1 : ComboBox
{
private MyClass _p=new MyClass(2,4);
/// <summary>
/// Get or set size of control
/// </summary>
[TypeConverter(typeof(Convert))]
[Description("Get or set size of control")]
public MyClass p
{
get { return _p; }
set { _p = value; }
}

public void test()
{
int x;
x = 0;
}
}