PDA

View Full Version : نوشتن رويداد سفارشي



h_kharkan
سه شنبه 13 مهر 1389, 13:21 عصر
با سلام
من يك تايمر در داخل برنامه تعريف كرده ام(‌از طريق كد) حال ميخواهم در هنگامي كه فرم لود ميشود مقدار دهي شده و در رويداد Timer.tick دستوراتم را اجرا نمايد
لطفا راهنمايي كنيد.

AmirAmiri
سه شنبه 13 مهر 1389, 13:24 عصر
سلام.
میتونی یک تابع برای اون رویداد بنویسی که از قالب اون رویداد پیروی کنه.
زمانی که برنامه لود میشه میتونی بنویسی :

Timer.tick+= new ....;اگه اشتباه ننوشته باشم.
فکر کنم تو همین مایه ها باشه.
مثلا برای کلیک روی TextBox که اینطوریه:


textBox1.Click += new System.EventHandler(this.textBox1_Click);

h_kharkan
سه شنبه 13 مهر 1389, 17:40 عصر
ممنون از راهنمایی
من تقریبا این کد را نوشتم و میخوام موقعی که رویداد Tm_Wait.Tick اتفاق افتاد مجموعه دستورات من اجرا بشه .یعنی یک پروگرس بار مقدار دهی بشه .
مثل کد زیر :


ProgressBar Pg_Wait = newProgressBar();
Pg_Wait.Location = newPoint(40, 55);
Pg_Wait.Minimum=0;
Pg_Wait.Maximum = 100;
Pg_Wait.Size = newSize(270, 15);
Pg_Wait.Step = 10;
Timer Tm_Wait = newTimer();
Tm_Wait.Tick += newEventHandler(Tm_Wait_Tick);
.
.
.
}

static void Tm_Wait_Tick(object sender, EventArgs e)
{
Pg_Wait.Value += 10;
if (Pg_Wait.Value >= 100)
Tm_Wait.Enabled = false;

}



Pg_Wait یک پروگرس باره ولی هیچکدام از متغیرهای من شناسایی نمیشه ممکنه یک قطعه کد کامل جهت این کار برای من بزارید در صورت امکان رویداد در مورد همین رویداد .
ممنون میشم

Javad_raouf
سه شنبه 13 مهر 1389, 18:29 عصر
سلام شما در کدتون Enable تایمر رو true نکردید و همچنین Interval آن را مقدار دهی نکرده اید
نمونه کد تست شده:

private void Form1_Load(object sender, EventArgs e)
{
Timer t1 = new Timer();
t1.Interval = 100;
t1.Enabled = true;
t1.Tick += new EventHandler(t1_Tick);
}
int i = 0;
void t1_Tick(object sender, EventArgs e)
{
this.Text = i.ToString();
i++;
}

h_kharkan
سه شنبه 13 مهر 1389, 19:42 عصر
از راهنمایی شما ممنون
مشکل اصلی من برطرف شد ولی هر دفعه که این قطعه کد را اجرا میکنم تایم اجرای این پروگرس بار کمتر و کمتر میشه .مثل اینکه تایم اینتروال تایمر کمتر میشه مثلا بار اول 2 ثانیه بار دوم 1 ثانیه و.. نمیدونم مشکل کجاست؟

flash118
سه شنبه 13 مهر 1389, 22:27 عصر
قاعدتا در کد های فوق که دوستان نوشتن عمل کاهش روی اینترول تایمر رخ نمی ده بازم اگه مطمئن هستید که این کار تکرار میشه براتون مشکل ساز خواهد بود نمونه کد برارید بررسی بشه موفق باشین

h_kharkan
پنج شنبه 15 مهر 1389, 17:24 عصر
سلام دوستان
این تابع نوشته شده من :




static int SecStep=0;
static Timer Tm_Wait = new Timer();
static ProgressBar Pg_Wait=new ProgressBar();
static F_Main F_Window = new F_Main();
.
.
.
public static void FarsiWait(String Txt, byte Sec)
{
String Str = "";
FontFamily font = new FontFamily("Tahoma");
F_Window.FormBorderStyle = FormBorderStyle.FixedDialog;
F_Window.StartPosition = FormStartPosition.CenterScreen;
F_Window.TopMost = true;
F_Window.RightToLeft = RightToLeft.Yes;
F_Window.Size = new Size(350, 110);
F_Window.Text=" ... ";
// -------------------------------------- Create Lable
Label L_Caption = new Label();
L_Caption.Text = Txt;
L_Caption.RightToLeft = RightToLeft.Yes;
L_Caption.Location = new Point(13, 13);
L_Caption.Font = new Font(font, 9, FontStyle.Bold);
L_Caption.ForeColor = Color.DarkBlue;
L_Caption.Size = new Size(318, 30);
L_Caption.TextAlign = ContentAlignment.MiddleCenter;

// --------------------------------- Create Progress Bar
Pg_Wait.Location = new Point(40, 55);
Pg_Wait.Minimum=0;
Pg_Wait.Maximum = 100;
Pg_Wait.Size = new Size(270, 15);
Pg_Wait.RightToLeft = RightToLeft.Yes;
Pg_Wait.RightToLeftLayout = true;
Pg_Wait.Style = ProgressBarStyle.Continuous;
SecStep = 10 / Sec;
F_Window.Load += new EventHandler(F_Window_Load);

//--------------------------------------
F_Window.Controls.Add(L_Caption);
F_Window.Controls.Add(Pg_Wait);
F_Window.ShowDialog();
}
static void F_Window_Load(object sender, EventArgs e)
{
Tm_Wait.Interval = 100;
Pg_Wait.Value = 0;
Pg_Wait.Step = SecStep;
Tm_Wait.Enabled = true;
Tm_Wait.Tick += new EventHandler(Tm_Wait_Tick);

}
static void Tm_Wait_Tick(object sender, EventArgs e)
{

if (Pg_Wait.Value >= Pg_Wait.Maximum)
{
Pg_Wait.Value = 0;
Tm_Wait.Interval = 100;
Tm_Wait.Enabled = false;
F_Window.Close();
}
Pg_Wait.PerformStep();
}