PDA

View Full Version : سوال: مشکل در فراخوانی event



masoud.a
دوشنبه 23 مرداد 1391, 10:54 صبح
میخواستم ایونت listBox1_DrawItem رو فراخوانی کنم.(sender,e) یا (null,null) رو هم امتحان کردم ولی جواب نداد

Mahmoud.Afrad
دوشنبه 23 مرداد 1391, 11:20 صبح
ایونتها را باید با آرگومان مناسب فراخوانی کردlistBox1_DrawItem(listBox1 , new DrawItemEventArgs(listBox1.CreateGraphics() , ....));نقطه چینو پر کن

masoud.a
دوشنبه 23 مرداد 1391, 12:17 عصر
ایونتها را باید با آرگومان مناسب فراخوانی کردlistBox1_DrawItem(listBox1 , new DrawItemEventArgs(listBox2.CreateGraphics() , ....));نقطه چینو پر کن

میشه راهنمائی کنید نقطه چین باید با چی پر بشه؟

hakim22
دوشنبه 23 مرداد 1391, 12:42 عصر
کدی رو که درون ListBox1_drawItem نوشتید رو به یک تابع منتقل کنید و بعد از هرجایی اجرا کنید
در غیر این صورت باید آرگومانهای ورودی به رویداد رو شبیه سازی کنید که همونطور که میبینید دردسرش زیاده !

masoud.a
دوشنبه 23 مرداد 1391, 13:27 عصر
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Color back = ((e.Index % 2) == 0) ? Color.Yellow : Color.Lavender;
Color fore = e.ForeColor;
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
back = e.BackColor;
fore = e.ForeColor;
}
e.Graphics.FillRectangle(new SolidBrush(back), e.Bounds);
if ((e.Index >= 0) && (e.Index < listBox1.Items.Count))
{
Image icon = Properties.Resources.icon;
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Far;
format.LineAlignment = StringAlignment.Center;
RectangleF rect = new RectangleF(e.Bounds.Location, new SizeF(e.Bounds.Width - e.Bounds.Height - 10, e.Bounds.Height));
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, new SolidBrush(fore), rect, format);
Rectangle dst = new Rectangle(e.Bounds.Right - e.Bounds.Height - 4, e.Bounds.Top + 6, e.Bounds.Height - 12, e.Bounds.Height - 14);
e.Graphics.DrawImage(Properties.Resources.icon, dst);
}
e.DrawFocusRectangle();
}


با زدن یه باتن میخوام فراخوانی شه

the king
دوشنبه 23 مرداد 1391, 21:44 عصر
با زدن یه باتن میخوام فراخوانی شه

این رخداد رسم شدن یک آیتم ئه، تا زمانی که زمان رسم شدن آیتم ها نرسه فراخوانی اش بی مورده.
ListBox ئه رو Invalidate یا Refresh کنید :

listBox1.Invalidate();


listBox1.Refresh();

masoud.a
سه شنبه 24 مرداد 1391, 14:26 عصر
این رخداد رسم شدن یک آیتم ئه، تا زمانی که زمان رسم شدن آیتم ها نرسه فراخوانی اش بی مورده.
ListBox ئه رو Invalidate یا Refresh کنید :

listBox1.Invalidate();


listBox1.Refresh();


Invalidate یا Refresh در قسمت کلیک باتن باید نوشته شه؟بعدش واسه فراخوانی باید چیکار کنم؟

the king
سه شنبه 24 مرداد 1391, 23:37 عصر
Invalidate یا Refresh در قسمت کلیک باتن باید نوشته شه؟بعدش واسه فراخوانی باید چیکار کنم؟

بله، در رخداد کلیک Button تون یکی از اون تا کد Invalidate یا Refresh رو می نویسید، اینها خودشون منجر به اجرا شدن صحیح رخداد DrawItem می شوند،
اونم نه یکبار، چند بار، برای هر کدوم از آیتم هایی که در ListBox در حال مشاهده هستند یکبار اجرا میشه تا اون آیتم رو رسم کنه.