PDA

View Full Version : سوال: جا به جایی فرم



ms-ninja
یک شنبه 03 مرداد 1395, 12:59 عصر
با سلام

من یک کد برای جا به جایی فرم دارم . خطایی وجود نداره ولی عمل نمی کنه



using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;


//for DLL's
using System.Runtime.InteropServices;


namespace MoveWindow
{
/// <summary>
/// Zusammenfassung für Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private Panel p1;


/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.Container components = null;


public Form1()
{
//
// Erforderlich für die Windows Form-Designerunterstützung
//
InitializeComponent();


//
// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
//
}


/// <summary>
/// Die verwendeten Ressourcen bereinigen.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}


#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geنndert werden.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.p1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 240);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(280, 24);
this.label1.TabIndex = 0;
this.label1.Text = "To move window, click anywhere on the form and move the mouse (hold button presse" +
"d!)";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// p1
//
this.p1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.p1.Location = new System.Drawing.Point(48, 67);
this.p1.Name = "p1";
this.p1.Size = new System.Drawing.Size(200, 60);
this.p1.TabIndex = 1;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.p1);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Move me!";
this.Load += new System.EventHandler(this.Form1_Load);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.p1_Mou seDown);
this.ResumeLayout(false);


}
#endregion


/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}


//const and dll functions for moving form
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();


//call functions to move the form in your form's MouseDown event
private void p1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}


private void Form1_Load(object sender, EventArgs e)
{


}
}
}

ms-ninja
دوشنبه 04 مرداد 1395, 12:05 عصر
از دوستان کسی مشکل پیدا نکرد؟

En_MK
دوشنبه 04 مرداد 1395, 12:29 عصر
وارد Event =p1_MouseDown میشه (اگر Break Point بذارید متوجه میشید)
اما کدی زیر هیچ کاری انجام نمیده...


ReleaseCapture(); SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);





می خوای چیکار کنید؟فرم جابه جا بشه؟

ms-ninja
دوشنبه 04 مرداد 1395, 16:13 عصر
دقیقا من میخوام یک پنل در بالای فرم قزاز بدو و با اون فرم (زمانی که کلیک موس ) جا به جا کنم . مثل کنترل بالای فرم

daniyaltjm
دوشنبه 04 مرداد 1395, 16:35 عصر
دقیقا من میخوام یک پنل در بالای فرم قزاز بدو و با اون فرم (زمانی که کلیک موس ) جا به جا کنم . مثل کنترل بالای فرم

شما دقیقا چکار می خواید بکنید؟ می خوای با کلیک روی هر جای فرم بتوی فرم رو جابجا کنی؟

ms-ninja
دوشنبه 04 مرداد 1395, 16:39 عصر
بله همینطوره:لبخندساده:

daniyaltjm
دوشنبه 04 مرداد 1395, 16:47 عصر
بله همینطوره:لبخندساده:

خوب شما اول دو تا متغیر سراسری و پابلیک تعریف کن به نام mousex و mousey

بعدش به دو تا رویداد احتیاج داری یکی mousemove و mousedown

من کدش رو پایین میذارم اگه سوالی داشتی بپرس:

using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int mousex;
int mousey;
public Form1()
{
InitializeComponent();
}


private void Form1_MouseDown(object sender, MouseEventArgs e)
{


if (e.Button == MouseButtons.Left)
{
mousex = e.X;
mousey = e.Y;
}
}


private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Top += e.Y - mousey;
this.Left += e.X - mousex;


}




}
}
}

ms-ninja
دوشنبه 04 مرداد 1395, 21:44 عصر
جواب نداد . برنامه ضمیمه شد

daniyaltjm
دوشنبه 04 مرداد 1395, 22:21 عصر
جواب نداد . برنامه ضمیمه شد

برای اینکه شما رویدادها رو یا تایپ کردی یا کپی کردی و نذاشتی خود ویژال استادیو بسازشون!! برنامه اصلاح و پیوست شد: :قهقهه::لبخند:

141648

ms-ninja
دوشنبه 04 مرداد 1395, 23:14 عصر
چه آبرو ریزی شد . اصلا حواسم نبود فکر کردم VB . آقا تشکر

daniyaltjm
دوشنبه 04 مرداد 1395, 23:46 عصر
چه آبرو ریزی شد . اصلا حواسم نبود فکر کردم VB . آقا تشکر

نه بابا چه آبرو ریزی!! اشکال از ویژال استادیو هست که خودش تشخیص نمیده!!