Tjena Nån som vet hur jag kan rita t.ex. en rektangel under mouse move men ta bort den föregående? ok, nu löste jag detFlytta kolumner i datagrid grafiskt
Jo, har implementerat så att man kan flytta en kolumn i en datagrid men skulle även vilja göra det grafiskt, helst så att det ser ut som när man flyttar kolumner i Windows Explorer. Grejen är den att jag har inte hittat hur man får tag i var på kolumnen man befinner sig (högra sidan, vänstra) eller hur man hittar mellanrummet mellan kolumnerna så man kan lägga in ett tjockare svart sträck där...
Dessutom skulle jag gärna vilja rita en egen grej, alt lägga in en knapp i kolumnheaderns textarea för att göra en annan grej.
Använder för övrigt DataGridColumnStyle
Nån som har förslag... Sv: Flytta kolumner i datagrid grafiskt
Alltså:
mousedown: starta drag
mousemove: rita rektangel med hjälp e.X, e.Y
ta bort eventuell föregående rekatangel
mouseup: avsluta drag. Ta bort rektangeln
det är mest hur jag kan ta bort föregående rektangel utan att rita om hela datagridden...
Förslag?Sv: Flytta kolumner i datagrid grafiskt
Jag sparar helt enkelt undan den senast ritade rektangeln.
Sen får jag skapa den nya rektangeln.
Skapar en region utifrån den sparade och exkluderar nya. Då får jag allt som ligger utanför den nya. Detta kan jag sen köra invalidate på.
Sedan får jag skapa en ny region för att inte rita på samma ställe som föregående rektangel.
klass variabler:
<code>
Rectangle rect=Rectangle.Empty;
Graphics g=null;
bool dnd=false;
Eventsen:
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
dnd=true;
g=this.CreateGraphics();
}
private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
dnd=false;
this.Invalidate(rect);
rect=Rectangle.Empty;
}
private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(dnd)
{
Rectangle newrect=new Rectangle(e.X,e.Y,100,20);
Brush b=new SolidBrush(Color.FromArgb(40,Color.Black));
Region reg;
if(rect!=Rectangle.Empty)
{
reg=new Region(rect);
reg.Exclude(newrect);
datagrid.Invalidate(reg);
reg=new Region(newrect);
reg.Exclude(rect);
g.FillRegion(b,reg);
}
else
{
g.FillRectangle(b,newrect);
}
rect=newrect;
}
}
</code>