ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1532
1532
EMPFEHLEN
-
Hi all,
ich würde gern ein Bild mit GDI+ zeichnen und auf diesem Bild ein Raster legen.
Hmm… wie kann ich das am besten beschreiben, ich will so eine art Schublade machen. Also ich habe 5 Fächer(was dann mein Raster währe), jetzt will ich da ein Bild noch drauf liegen haben und z.B. jetzt von Fach 1 in Fach 3 verschieben.
Wie kann ich so was am besten realisieren oder hat wer ein kleines Beispiel oder so in der art?
Ich hoffe ich habe den Topic Namen richtig gewählt und auch in das richtige Forum gewählt habe
Gruß
Dlooney
-
ok ich denke mal mein ak. Projekt funktioniert ähnlich wie du es beschrieben hast und ich saß jetzt ne Stunde dran das in einer kurzen Form darzustellen. Doch da hängen zu viele Klassen dran deshalb versuch ichs mal anders

Einfach:
Du könntest zum Beispiel das TableLayout Control verwenden, dann noch eine PictureBox auf dein Formular haun und über Left und Top Eigenschaft das Bild bewegen. Beim bewegen am besten den Parent vom TableLayout auslösen und beim loslassen über ein Fach/Panel dann Parent neu mit diesem Panel setzen.
Nachteil eine Zelle kann jeweilss nur ein Control halten
Komplizierter:
Du erstellst dir ein 2 dimensionales Array als Typ könntest du eine Liste verwenden (falls mehrere Bilder in einem Fach sein sollen).
Dann haust du eine PictureBox auf dein Formular und im KeyDown Ereignis schaust du nach in welchem Fach du gerade stehst:
Ist so ein Pseudo-, könnte funktionieren, CodePHP-Code:int fachSize=100;
StateEnum selectedStatus;
List<StateEnum>[,] meinArray=new List<StateEnum >[5,5];
Dictionary<StateEnum, Image> bilder=Dictionary<StateEnum, Image>(); hält Liste von Bilder zum angegebenen Status
void pic_keyDown(MouseEventArgs e)
{
int fachX=(int)(e.X/fachSize);
int fachY=(int)(e.Y/fachSize);
selectedStatus=StateEnum.None; //repräsentiert das kein Bild ausgewählt
if(fachX<5 && fachY<5)
{
int count=meinArray[fachX][fachY].Count;
if(count>0)
selectedStatus=meinArray[fachX][fachY][count-1];
}
}
void pic_keyUp(MouseEventArgs e)
{
if(selectedStatus!=StateEnum.None)
{
int fachX=(int)(e.X/fachSize);
int fachY=(int)(e.Y/fachSize);
meinArray[fachX][fachY].Add(selectedStatus);
selectedStatus=StateEnum.None;
}
}
void pic_keyMove(MouseEventArgs e))
{
if(selectedStatus!=StateEnum.None)
pic.Invalidate();
}
void pic_Paint(PaintEventArgs e)
{
//bisher gesetzte Fächer anzeigen
for(int x=0; x<meinArray.GetLength();x++)
{
for(int y=0; y<meinArray[x].GetLength();y++)
{
foreach(StateEnum status in meinArray[x][y])
e.Graphics.DrawImage(SystemBrushes.Window,new Point(x*fachSize,y*fachSize),bilder[status ]);
}
}
//gerade bewegtes Bild anzeigen
if(selectedStatus!=StateEnum.None)
e.Graphics.DrawImage(SystemBrushes.Window,MausPosition,bilder[selectedStatus]);
}

Hoffe ist einigermaßen verständlichen, wollt schon längst im Bett liegen
Spyke (www.iv-interactive.de)
-
Hi all,
ich hab ein Problem. Ich hab jetzt mir eine TableLayoutPanel erstellt das z.B. das die Anzahl der Rows 40 besitzt. So jede Row soll eine Pixel Höhe von 15 besitzen, jetzt ist das erste Problem die Rows wo ich nichts adde macht der aber nicht 15 Hoch sondern schiebt die zusammen was natürlich den Drop and Drag verhindert da ich in die nichts mehr reinschieben kann. Ich hab als Spontane Lösung einfach immer ein Label geaddet und dann taucht ein 2 Problem auf wenn ich jetzt etwas per Drop and Drag verschiebe schiebt er es mir zwar an die richtige Position aber danach ist kein Drop and Drag mehr möglich. Mein 3 Problem ist ich lass extra alles neu der TableLayoutPanel adden was wahrscheinlich nicht so toll ist hat da wer ein bessere Idee für?
Hier mal teile des Quellcodes
Variablen
Code :1 2 3 4
private PictureBox pictureBox; private TableLayoutPanel tableLayoutPanel; private Int32[,] copy; private Int32[,] org;
Einstellungen der TableLayoutPanel
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
tableLayoutPanel = new TableLayoutPanel(); tableLayoutPanel.RowCount = anzahl; tableLayoutPanel.Size = new Size(15, 250); tableLayoutPanel.Margin = new Padding(0, 0, 0, 0); tableLayoutPanel.Padding = new Padding(0, 0, 0, 0); tableLayoutPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; tableLayoutPanel.ColumnCount = 1; tableLayoutPanel.AllowDrop = true; tableLayoutPanel.AutoScroll = true; tableLayoutPanel.GrowStyle = TableLayoutPanelGrowStyle.FixedSize; tableLayoutPanel.AllowDrop = true; tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 15)); tableLayoutPanel.DragDrop += new DragEventHandler(this.tableLayoutPanel_DragDrop); tableLayoutPanel.DragEnter += new DragEventHandler(this.tableLayoutPanel_DragEnter);
Die Events
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
private void pictureBox_MouseDown(object sender, MouseEventArgs e) { for (Int32 i = anzahl - 1; i > 0; i--) { if (copy[i, 0] == Convert.ToInt32(pictureBox.Name)) { copy[i, 0] = 0; copy[i, 1] = 0; } } tableLayoutPanel.DoDragDrop(pictureBox, DragDropEffects.Move); } private void tableLayoutPanel_DragDrop(object sender, DragEventArgs e) { TableLayoutPanelCellPosition cellpos = tableLayoutPanel.GetCellPosition(tableLayoutPanel.GetChildAtPoint(tableLayoutPanel.PointToClient(new Point(e.X, e.Y)))); copy[cellpos.Row, 0] = Convert.ToInt32(pictureBox.Name); copy[cellpos.Row, 1] = Convert.ToInt32(pictureBox.Tag); repaintTable(); tableLayoutPanel.Refresh(); } private void tableLayoutPanel_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; }
repaintTable(); ist eine methode wo ich einfach den Int array von copy neu in die TableLayoutPanel adde
Gruß Dlooney
Ps. Ich verzweifel langsam an diesen Drag and Drop mit der table xD
Ähnliche Themen
-
Probleme mit dem Bild anzeigen im Raster?
Von jackie05 im Forum Cinema 4DAntworten: 4Letzter Beitrag: 09.06.07, 23:27 -
Bild mit 45 Grad einscannen ? Raster
Von Heizemusik im Forum PhotoshopAntworten: 2Letzter Beitrag: 28.06.05, 14:37 -
raster?
Von kalicki2k im Forum PhotoshopAntworten: 3Letzter Beitrag: 10.05.05, 16:56 -
Raster und Bild
Von Spielgrips im Forum PhotoshopAntworten: 5Letzter Beitrag: 17.10.02, 10:51 -
Raster
Von benyio im Forum PhotoshopAntworten: 3Letzter Beitrag: 30.12.01, 16:01





Zitieren
Login





