PDA

View Full Version : دو تا سئوال در مورد کلاس ها



مهدی رحیم زاده
جمعه 12 بهمن 1386, 19:15 عصر
سلام
من یک کلاسی می خوام تعریف کنم که یک Object از نوع فرم برای اون ارسال کنم و بعد اون اونو از حالت نامرئی به مرئی تبدیل کنه . میشه بگید که چطور باید این کار رو انجام بدم .
من خواستم با این کد این کار رو انجام بدم :

using System;
using System.Collections.Generic;
using System.Text;

namespace Sateb
{
class show_forms_effect
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
System.Windows.Forms.Form frm = new System.Windows.Forms.Form();
Double count = 0.0;
public void show_form()
{
timer.Interval = 1000;
timer.Enabled = true;
count += 0.02;
frm.Opacity = count;
if (count > 1.0)
timer.Enabled = false;
}
}
}

اما مشکلی که هست نمی دونم چطور باید فرم مورد نظر رو به اون ارسال کنم تا Opacity اون تغییر کنه .
2- چطوری می تونم توی کلاس یه تابع تعریف کنم که از نوع Datatable باشه و بعد بتونه اون مقدار رو Return کنه ؟؟؟؟؟

sinpin
جمعه 12 بهمن 1386, 19:26 عصر
سلام
من یک کلاسی می خوام تعریف کنم که یک Object از نوع فرم برای اون ارسال کنم و بعد اون اونو از حالت نامرئی به مرئی تبدیل کنه . میشه بگید که چطور باید این کار رو انجام بدم .
من خواستم با این کد این کار رو انجام بدم :

using System;
using System.Collections.Generic;
using System.Text;

namespace Sateb
{
class show_forms_effect
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
System.Windows.Forms.Form frm = new System.Windows.Forms.Form();
Double count = 0.0;
public void show_form()
{
timer.Interval = 1000;
timer.Enabled = true;
count += 0.02;
frm.Opacity = count;
if (count > 1.0)
timer.Enabled = false;
}
}
}
اما مشکلی که هست نمی دونم چطور باید فرم مورد نظر رو به اون ارسال کنم تا Opacity اون تغییر کنه
نامگذاری کلاس شما یه مقداری مشکل داره و بیشتر شبیه نامگذاری یک متود است تا کلاس. کلاس زیر کار مورد نظر شما رو انجام میده (البته از تایمر استفاده نکردم) :

class FormEffect
{
public void ShowOpacityEffect(Form _form)
{
if (_form.Opacity == 0)
{
for(int i=0 ; i<100; i++)
{
_form.Opacity += .01;
Application.DoEvents();
}
}
else
{
for (int i = 0; i < 100; i++)
{
_form.Opacity -= .01;
Application.DoEvents();
}
}
}
}
2- چطوری می تونم توی کلاس یه تابع تعریف کنم که از نوع Datatable باشه و بعد بتونه اون مقدار رو Return کنه ؟؟؟؟؟

class DAL
{
public DataTable SelectTable(string _query)
{
DataTable dt = new DataTable();
. . .
. . .
. . .
return dt;
}
}

مهدی رحیم زاده
جمعه 12 بهمن 1386, 20:10 عصر
نامگذاری کلاس شما یه مقداری مشکل داره و بیشتر شبیه نامگذاری یک متود است تا کلاس. کلاس زیر کار مورد نظر شما رو انجام میده (البته از تایمر استفاده نکردم) :

کد:
class FormEffect
{
public void ShowOpacityEffect(Form _form)
{
if (_form.Opacity == 0)
{
for(int i=0 ; i<100; i++)
{
_form.Opacity += .01;
Application.DoEvents();
}
}
else
{
for (int i = 0; i < 100; i++)
{
_form.Opacity -= .01;
Application.DoEvents();
}
}
}
}نقل قول:
نوشته شده توسط iranmsb
2- چطوری می تونم توی کلاس یه تابع تعریف کنم که از نوع Datatable باشه و بعد بتونه اون مقدار رو Return کنه ؟؟؟؟؟

کد:
class DAL
{
public DataTable SelectTable(string _query)
{
DataTable dt = new DataTable();
. . .
. . .
. . .
return dt;
}
}
دوست عزیز
در مورد کد اولتون : نمی دونم چرا اجرا نمیشه ! یعنی فرم نامرئی باقی میمونه !!!
و حالا کد دوم :
من نمی دونم باید چکار کنم تا نوع DataTable رو بشناسه ، یعنی این نوع رو نمیشناسه !!!!

Mahdi.Kiani
جمعه 12 بهمن 1386, 21:16 عصر
دوست عزیز
در مورد کد اولتون : نمی دونم چرا اجرا نمیشه ! یعنی فرم نامرئی باقی میمونه !!!
و حالا کد دوم :
من نمی دونم باید چکار کنم تا نوع DataTable رو بشناسه ، یعنی این نوع رو نمیشناسه !!!!
خوب معلومه که همیشه فرمت نامرئی میمونه چون احتمالا شما Opacity فرم را صفر نکردی. و قسمت else اجرا میشه و opacity فرم را کم می کنه تا فرم نا پدید بشه.
قسمت else جهت نا مرئی کردن فرم هست که فکر کنم اینجا زیادی باشه !!!

کد متد را به شکل زیر تغییر بده



public void ShowOpacityEffect(Form _form)
{
if (_form.Opacity == 0)
{
for (int i = 0; i < 100; i++)
{
_form.Opacity += .01;
Application.DoEvents();
}
}
//else
//{
// for (int i = 0; i < 100; i++)
// {
// _form.Opacity -= .01;
// Application.DoEvents();
// }
//}
}



در ضمن قبل از فراخوانی متد opacity را روی صفر تنظیم کن. چون در غیر این صورت حلقه هیچگاه اجرا نمیشه..

می تونی کد فوق را خودت بهتر کنی . چون این کد تنها زمانی به درد می خوره که قبلش حتما opacity صفر باشه ولی اگر کاربر خواست از مقدار 0.1 شروع بشه نه تنها به مقصودش نمیرسه بلکه فرم ناپدید میشه!!!






this.Opacity = 0;
FormEfect eff = new FormEfect();
eff.ShowOpacityEffect(this);




برای DataTable هم احتمالا



using System.Data;


را به کلاست اضافه نکردی

Mahdi.Kiani
جمعه 12 بهمن 1386, 21:29 عصر
قابل توجه آقای امیر شکاری
یک کار شخصی باهاتون داشتم که ظاهرا Pesonal Message تون را disable کردین

مهدی رحیم زاده
جمعه 12 بهمن 1386, 22:50 عصر
خوب معلومه که همیشه فرمت نامرئی میمونه چون احتمالا شما Opacity فرم را صفر نکردی. و قسمت else اجرا میشه و opacity فرم را کم می کنه تا فرم نا پدید بشه.
قسمت else جهت نا مرئی کردن فرم هست که فکر کنم اینجا زیادی باشه !!!

من اونو صفر هم کرده بودم اما بازم جواب نداد !!!!

Mahdi.Kiani
جمعه 12 بهمن 1386, 23:07 عصر
من اونو صفر هم کرده بودم اما بازم جواب نداد !!!!

نمونه برنامت را بزار ببینم

مهدی رحیم زاده
شنبه 13 بهمن 1386, 00:31 صبح
من می خوام که این کلاس رو تعریف کنم و بعد توی تمام برنامه هام از اون استفاده کنم

Mahdi.Kiani
شنبه 13 بهمن 1386, 07:42 صبح
من می خوام که این کلاس رو تعریف کنم و بعد توی تمام برنامه هام از اون استفاده کنم

صرفه نظر از این که اصلا این کد خوب است، بهینه است و کلی حرف دیگه در مورد اون که ظاهرا شما اصلا به پست های من در این زمینه توجه نکردین، یک نمونه با تغییری بر رویهمین کلاسی که فرستادی برات فرستادم

sinpin
شنبه 13 بهمن 1386, 08:07 صبح
قسمت else جهت نا مرئی کردن فرم هست که فکر کنم اینجا زیادی باشه !!!می تونی کد فوق را خودت بهتر کنی . چون این کد تنها زمانی به درد می خوره که قبلش حتما opacity صفر باشه ولی اگر کاربر خواست از مقدار 0.1 شروع بشه نه تنها به مقصودش نمیرسه بلکه فرم ناپدید میشه!!!
قابل توجه جناب آقای کیانی عزیز و نقطه سنج !
من این کد رو فی البداهه نوشتم و تست نکردم (اولین و دومین پست رو نگاه کنید. من 11 دقیقه بعد از ایجاد تاپیک ایشون پست دادم و خب با وحی (!) هم زیاد در ارتباط نیستم که بلافاصله پس از ایجاد تاپیک دوستمون متوجه بشم) ؛ روی این کد 3 دقیقه وقت گذاشتم (جنبه آموزشی) که اگه کد رو برای خودم مینوشتم بیش از این وقت میزاشتم.

من اونو صفر هم کرده بودم اما بازم جواب نداد !!!!
دوست عزیز اولا بهتره delay رو بیشتر کنید : (الان که کد رو تست کردم احساس کردم)

class FormEffect
{
public void ShowOpacityEffect(Form _form)
{
if (_form.Opacity == 0)
{
for(int i=0 ; i<1000; i++)
{
_form.Opacity += .001;
Application.DoEvents();
}
}
else
{
for (int i = 0; i < 1000; i++)
{
_form.Opacity -= .001;
Application.DoEvents();
}
}
}
}و کدتون رو در کلاس فرم به این شکل بنویسید:

public partial class Form1 : Form
{
FormEffect formEffect;
private const string FirstTime = "ThisIsMyFirstTime!!!";

public Form1()
{
InitializeComponent();
formEffect = new FormEffect();
}

private void Form1_Activated(object sender, EventArgs e)
{
if (this.Tag.ToString() == FirstTime)
formEffect.ShowOpacityEffect(this);
this.Tag = "";
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
formEffect.ShowOpacityEffect(this);
}

private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = 0;
this.Tag = FirstTime;
}
}در هنگام اکتیو شدن فرم Fade In و زمان بسته شدن Fade Out میشه...