PDA

View Full Version : اجرا نشدن رویداد یک UserControl که برای فرم های برنامه ساخته ام



morteza271
سه شنبه 15 شهریور 1390, 10:55 صبح
سلام دوستان.

من با استفاده از UserControl یه هدر درست کردم که این هدر رو برای تمام فرم های برنامم گذاشتم.
حالا چون هدر خود فرمها رو برداشتم میخوام وقتی کاربر روی هدری که خودم ساختم و گذاشتمش کلیک میکنه و میکشه فرمم جابجا بشه.

برای اینکار در رویداد Mouse_Down هدر در هر فرم یه کدی نوشتم.
ولی متاسفانه اصلا این رویداد اجرا نمیشه!!!
به نظرتون مشکلش چیه؟؟
چرا این رویداد اجرا نمیشه؟باید چیکارش کنم؟؟

با تشکر

gwbasic
سه شنبه 15 شهریور 1390, 14:33 عصر
رویداد Mouse_Down روبرای UserControl بنویس یا کنترلی که روی UserControl ت احتمالا Dock کردی و بعد از طریق خصوصیت parent مربوط به UserControl به Form ی که این UserControl در آن قرار داره دسترسی داری و می تونی DesktopLocation رو برای اون ست کنی

morteza271
سه شنبه 15 شهریور 1390, 17:06 عصر
ممنونم دوست عزیز.
من از خاصیت Location برای جابجایی فرم استفاده نمیکنم از کد زیر برای این کار استفاده مکینم:
#region MoveForm
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd,
int Msg, int wParam, int lParam);

[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
#endregion
private void Label_Or_OtherComponent_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}

که این کد با روشی که شما گفتین جواب نداد!!!
میشه بگین چجوری با استفاده از Location میشه فرم رو جابجا کرد؟
ممنون میشم یه نمونه کد برام بذارین.
با تشکر...

wolf_majid
سه شنبه 15 شهریور 1390, 19:52 عصر
با روش شما تست کردم جواب داد

public Form1()
{
InitializeComponent();
userControl11.MouseDown += new MouseEventHandler(Label_Or_OtherComponent_MouseDow n);
}

morteza271
سه شنبه 15 شهریور 1390, 22:57 عصر
با روش شما تست کردم جواب داد

public Form1()
{
InitializeComponent();
userControl11.MouseDown += new MouseEventHandler(Label_Or_OtherComponent_MouseDow n);
}

شما چجوری از روش من استفاده کردین که جواب داد؟؟!!!
من داخل UserControl کلی panel و عکس دارم ها!!!
فکر کنم شما یه UserControl خالی گذاشتین و تست کردین.

wolf_majid
چهارشنبه 16 شهریور 1390, 00:07 صبح
یک userControl با یک button و یک picBox درست کردم
و کد حرکت فرمتون را توی کلاس فرم به کار بردم بعدم توی سازنده فرم تابع حرکت رو به رویداد mouse_Down کنترل کاربر اضافه کردم و جواب داد

wolf_majid
چهارشنبه 16 شهریور 1390, 07:54 صبح
حق با شماست با panel و groupBox تست کردم جواب نداد.

کد زیر را به کلاس فرمتون اضافه کنید
private void AddEventToUserControl(Control _ctrl)
{
foreach (Control ctrl in _ctrl.Controls)
{
if (ctrl is GroupBox || ctrl is Panel)
{
ctrl.MouseDown += new MouseEventHandler(Label_Or_OtherComponent_MouseDow n);
AddEventToUserControl(ctrl);
}
}
}
و این کد را به سازنده فرم
AddEventToUserControl(userControl11);
روی پنل و groupBox هم جواب میده

morteza271
چهارشنبه 16 شهریور 1390, 14:09 عصر
واقعا ازتون ممنونم که برای پیدا کردن راه حل وقت گذاشتین و کمکم کردین.خیلی لطف کردین با تشکر فراوان
موفق باشید

vesall
جمعه 08 مهر 1390, 23:05 عصر
منم همین کارارو میخوام بکنم، ولی هیچ سر در نیاوردم :دی میشه کد کامل رو بگذارید ؟

ya30ien2
جمعه 08 مهر 1390, 23:24 عصر
ادامه بحس به اینجا (http://barnamenevis.org/showthread.php?307229-جابجا-کردن-موقعیت-برنامه-در-صفحه-با-موس) کشیده