我一直在寻找,但没有找到答案我的问题了。如果已经有答案,我很抱歉,我没有找到它。请指出我,谢谢。
我在表单中有一个面板(大小:350 * 60)。在这个面板中,我有5个文本框(每个大小:70 * 60)。我希望能够在此面板中执行此元素的拖放操作(或mouseEvents)(如果光标离开此面板,文本框保留在面板上),但只能水平放置。如果我使用文本框1并且我想将其保留在第3个位置,则textbox2和3将向左移动一个位置。如果我想将数字5移动到第二个位置,textbox2,3,4将向右移动一个位置。
我想做一些类似于Windows底部的栏目,你可以在那里控制并在这个栏上移动它们。
如果有人可以帮助我,我会继续找到答案,如果我找到它,我会在这里发布。
我正在使用winform,visual studio,c#为动态导航控件添加.dll。
感谢所有知道如何帮助的人以及其他人。
美好的一天
我发布的代码,任何人都能理解它,可以帮助我:
// Tengo que probar lo escrito en la libreta, con posInicial, posCruce, areaPermitida, isDragging, sueltaBoton
TextBox tbInitial = new TextBox();//tb ou je rentre
TextBox tbFinal = new TextBox();//tb ou je laisse
Color colorPrimaire = new Color();//pour changer la couleur de rentrage au textbox
Boolean _mouseDown = false; //si c'est appuyé
Point _mouseDownPos; // position a l'appuillage du mouse
Point tbPosInitial, tbPosFinal;// position a l'appuillage et au laissage des tb
Rectangle tbRectInitial, tbRectFinal; // rectangle des tb initial et final
// Commence le drag and drop en lui passant le control est proprietées et les types d'effect
private void tb_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
colorPrimaire = tb.BackColor;
tbInitial = (sender as TextBox);
tbPosInitial = tbInitial.Location;
_mouseDown = true;
_mouseDownPos = e.Location;
tbInitial.BringToFront();
tbRectInitial = tbInitial.DisplayRectangle;
tbInitial.DragEnter += new DragEventHandler(tbInitial_DragEnter);
}
}
private void tbInitial_DragEnter(object sender, DragEventArgs e)
{
if (_mouseDown)//pour pouvoir bouger horizontalement
{
Point posPremiere = new Point(70, 0);
Point posUltime = new Point(nRoles * 70, 0);
int deltaX = e.X - _mouseDownPos.X;
int deltaY = e.Y - _mouseDownPos.Y;
tbInitial.Location = new Point(tb.Left + deltaX, tb.Top /* + deltaY */);
tbInitial.BackColor = Color.CornflowerBlue;
tbFinal = (sender as TextBox);
tbPosFinal = tbFinal.Location;
tbRectFinal = tbFinal.DisplayRectangle;
int numRolInicial = tbPosInitial.X / 70;
int numRolFinal = tbPosFinal.X / 70;
//Pour commencer le drag
tbInitial.DoDragDrop(tbInitial, DragDropEffects.Move);
//Pour faire bouger les textbox, je dois lui dire que tout les tb from tbInitial jusqu'a tbFinal doivent bouger + ou - une position
tbInitial.AllowDrop = true;
//Pour gerer le drop et le leave et le enter sur le tbFinal
tbFinal.DragEnter += new DragEventHandler(tbFinal_DragEnter);
tbFinal.DragDrop += new DragEventHandler(tbFinal_DragDrop);
tbFinal.DragLeave += new EventHandler(tbFinal_DragLeave);
//Pour ne pas pouvoir aller en dehors les limites
if (tbPosInitial.X < posPremiere.X)
{
tbPosFinal = posPremiere;
}
if (tbPosInitial.X > posUltime.X)
{
tbPosFinal = posUltime;
}
}
}
private void tbFinal_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void tbFinal_DragDrop(object sender, DragEventArgs e)
{
_mouseDown = false;
MessageBox.Show("TbInitial location:" + tbPosInitial.ToString());//me da la posicion del raton en el textbox
MessageBox.Show("TbFinal location:" + tbPosFinal.ToString());//me da la posicion final del textbox
EventControlAddin(3, tbInitial.Name.PadRight(10) + ";" + (string)tbFinal.Name);
if (colorPrimaire == Color.Bisque)
{
tb.BackColor = Color.Bisque;
}
else
{
tb.BackColor = Color.Gray;
}
}
private void tbFinal_DragLeave(object sender, EventArgs e)
{
//Je dois recommencer tous.
tb = tbFinal;
tb.MouseDown += new MouseEventHandler(tb_MouseDown);
}
private void tb_MouseMove(object sender, MouseEventArgs e)
{
if (_mouseDown)//pour pouvoir bouger horizontalement
{
Point posPremiere = new Point(70, 0);
Point posUltime = new Point(MainPanel.Controls.Count * 70, 0);
int deltaX = e.X - _mouseDownPos.X;
int deltaY = e.Y - _mouseDownPos.Y;
tbInitial.Location = new Point(tb.Left + deltaX, tb.Top /* + deltaY */);
tbInitial.BackColor = Color.CornflowerBlue;
tbFinal = (sender as TextBox);
tbPosFinal = tbFinal.Location;
tbRectFinal = tbFinal.DisplayRectangle;
int numRolInicial = tbPosInitial.X / 70;
int numRolFinal = tbPosFinal.X / 70;
//Pour faire bouger les textbox, je dois lui dire que tout les tb from tbInitial jusqu'a tbFinal doivent bouger + ou - une position
//Pour ne pas pouvoir aller en dehors les limites
if (tbInitial.Location.X < posPremiere.X)
{
tbPosFinal = posPremiere;
}
if (tbInitial.Location.X > posUltime.X)
{
tbPosFinal = posUltime;
}
}
}
private void tb_MouseUp(object sender, MouseEventArgs e)
{
_mouseDown = false;
MessageBox.Show("TbInitial location:" + tbPosInitial.ToString());//me da la posicion del raton en el textbox
MessageBox.Show("TbFinal location:" + tbPosFinal.ToString());//me da la posicion final del textbox
EventControlAddin(3, tbInitial.Name.PadRight(10) + ";" + (string)tbFinal.Name);
if (colorPrimaire == Color.Bisque)
{
tb.BackColor = Color.Bisque;
}
else
{
tb.BackColor = Color.Gray;
}
}