tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1532
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    dlooney dlooney ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    25
    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
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    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:
    PHP-Code:
    int fachSize=100;
    StateEnum selectedStatus;
    List<
    StateEnum>[,] meinArray=new List<StateEnum >[5,5];
    Dictionary<StateEnumImagebilder=Dictionary<StateEnumImage>(); 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<&& 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=0x<meinArray.GetLength();x++)
          {
               for(
    int y=0y<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]);

    Ist so ein Pseudo-, könnte funktionieren, Code
    Hoffe ist einigermaßen verständlichen, wollt schon längst im Bett liegen

    Spyke (www.iv-interactive.de)
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    dlooney dlooney ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    25
    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

  1. Probleme mit dem Bild anzeigen im Raster?
    Von jackie05 im Forum Cinema 4D
    Antworten: 4
    Letzter Beitrag: 09.06.07, 23:27
  2. Bild mit 45 Grad einscannen ? Raster
    Von Heizemusik im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 28.06.05, 14:37
  3. raster?
    Von kalicki2k im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 10.05.05, 16:56
  4. Raster und Bild
    Von Spielgrips im Forum Photoshop
    Antworten: 5
    Letzter Beitrag: 17.10.02, 10:51
  5. Raster
    Von benyio im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 30.12.01, 16:01