Windows Form Drag and Drop probléma C#

Windows Form Drag and Drop probléma C#
2017-02-25T11:45:08+01:00
2017-02-26T19:34:28+01:00
2022-10-15T23:26:00+02:00
SzabolcsiJ
Egyszerűen ListBox-ok között akarok szöveget áthúzni. Ebben a példában működik:

using System; using System.Windows.Forms; namespace Drag_and_Drop { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { lbElso.Items.Add("Istvan"); lbElso.Items.Add("Judit"); lbElso.Items.Add("Balazs"); lbElso.Items.Add("Viktoria"); } private void lbElso_MouseDown(object sender, MouseEventArgs e) { this.DoDragDrop(((ListBox)sender).SelectedItem.ToString(), DragDropEffects.Move); } private void lbMasodik_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } private void lbMasodik_DragDrop(object sender, DragEventArgs e) { ((ListBox)sender).Items.Add(e.Data.GetData(DataFormats.Text).ToString()); lbElso.Items.Remove(lbElso.SelectedItems[0]); } } }
Rendesen áthúzza a neveket az lbElso-ből az lbMasodik-ba.

Akkor a következő kódban miért nem működik? Amikor áthúzom a jobb oldali listboxból a "csónakba", akkor nem a szöveg jelenik meg, hanem "System.Windows.Forms.ListBox+SelectedObjectCollection" (ennek az eleje, ami belefér a Listboxba).
A
private void lBoat_DragDrop(object sender, DragEventArgs e)
függvényről van szó.
Magyarázza el valaki nekem, hogy mi a különbség, mert én nem látok semmit...

using System; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace _09MisszionarusKanibal { public partial class frmMisszkanib : Form { ListBox lBoat; bool jobbra = true; //csónak haladási iránya int bal_k = 3, jobb_k = 0, bal_m = 3, jobb_m = 0; int regi_bal_m, regi_jobb_m, regi_bal_k, regi_jobb_k; int lepesszam = 0; public frmMisszkanib() { InitializeComponent(); } private void frmMisszkanib_Load(object sender, EventArgs e) { lBoat = new ListBox(); lBoat.Size = new Size(120, 60); lBoat.Location = new Point(126, 113); lBoat.SelectionMode = SelectionMode.One; //lBoat.Items.Add("---->>>"); lBoat.BackColor = Color.SaddleBrown; lBoat.AllowDrop = true; this.Controls.Add(lBoat); this.lBoat.Click += new System.EventHandler(this.lBoat_Click); this.lBoat.DragOver += new DragEventHandler(this.lBoat_DragOver); this.lBoat.DragDrop += new DragEventHandler(this.lBoat_DragDrop); lbRight.Enabled = false; lbLeft.Enabled = true; } private void frmMisszkanib_Shown(object sender, EventArgs e) { MessageBox.Show("A játék lénylege: vidd át a hat embert a folyó túlpartjára. " + "A csónakba csak ketten férnek be. És vigyázz mert ha bárhol több a kanibál. mint " + "a misszionárius, akkor a kanibálok megeszik a misszionáriusokat!" + "/nSok sikert!", "Misszionáriusok és kanibálok játákszabály"); } private void lBoat_Click(object sender, EventArgs e) { /*var selL = lbLeft.SelectedItems; var selR = lbRight.SelectedItems; int countL = selL.Count; int countR = selR.Count;*/ regi_bal_k = bal_k; regi_bal_m = bal_m; regi_jobb_k = jobb_k; regi_jobb_m = jobb_m; if (lBoat.Items.Count > 0 && jobbra) //balról jobbra { lbRight.Enabled = false; lbLeft.Enabled = true; for (int i = 0; i < lBoat.Items.Count; i++) { if (lBoat.Items[i].ToString()[0] == 'M') { bal_m--; jobb_m++; } if (lBoat.Items[i].ToString()[0] == 'K') { bal_k--; jobb_k++; } //lbLeft.Items.Add(selR[0]); //lbRight.Items.Remove(selR[0]); } if (Mozgathato_e()) { lepesszam++; lbRight.Items.AddRange(lBoat.Items.OfType<object>().ToArray()); lBoat.Items.Clear(); jobbra = !jobbra; if (bal_k == 0 && bal_m == 0) { MessageBox.Show("Átvitted őket! " + lepesszam + " lépésben sikerült.", "Vége a játéknak"); Application.Exit(); } lBoat.Left = 228; //lBoat.Text = "<<<---"; lbRight.Enabled = true; lbLeft.Enabled = false; } else { hiba(); } } //balról jobbra vége if (lBoat.Items.Count > 0 && !jobbra) // jobbról balra { lbRight.Enabled = true; lbLeft.Enabled = false; for (int i = 0; i < lBoat.Items.Count; i++) { if (lBoat.Items[i].ToString()[0] == 'M') { bal_m++; jobb_m--; } if (lBoat.Items[i].ToString()[0] == 'K') { bal_k++; jobb_k--; } //lbLeft.Items.Add(selR[0]); //lbRight.Items.Remove(selR[0]); } if (Mozgathato_e()) { lepesszam++; lbLeft.Items.AddRange(lBoat.Items.OfType<object>().ToArray()); lBoat.Items.Clear(); jobbra = !jobbra; lBoat.Left = 126; //lBoat.Text = "---->>>"; lbRight.Enabled = false; lbLeft.Enabled = true; } else { hiba(); } } //jobbról balra vége } private void hiba() { MessageBox.Show("A kanibálok megeszik a misszionáriusokat!!! Nem jó!!!", "A játékszabály megsértése!", MessageBoxButtons.OK, MessageBoxIcon.Warning); lbLeft.ClearSelected(); lbRight.ClearSelected(); bal_m = regi_bal_m; bal_k = regi_bal_k; jobb_k = regi_jobb_k; jobb_m = regi_jobb_m; if(lbLeft.Enabled) { lbLeft.Items.AddRange(lBoat.Items.OfType<object>().ToArray()); } else { lbRight.Items.AddRange(lBoat.Items.OfType<object>().ToArray()); } lBoat.Items.Clear(); } public bool Mozgathato_e() { if ((bal_k <= bal_m || bal_m == 0) && (jobb_k <= jobb_m || jobb_m == 0)) return true; else return false; } private void lbLeft_MouseDown(object sender, MouseEventArgs e) { this.DoDragDrop(((ListBox)sender).SelectedItems.ToString(), DragDropEffects.Move); } private void lBoat_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } private void lBoat_DragDrop(object sender, DragEventArgs e) { if (lBoat.Items.Count == 2) { MessageBox.Show("csak két személyes a csónak"); } else { MessageBox.Show(e.Data.GetData(DataFormats.Text).ToString()); ((ListBox)sender).Items.Add(e.Data.GetData(DataFormats.Text).ToString()); if (lbLeft.Enabled) { //lBoat.Items.Add(lbLeft.SelectedItems[0]); lbLeft.Items.Remove(lbLeft.SelectedItems[0]); } else { //lBoat.Items.Add(lbRight.SelectedItems[0]); lbRight.Items.Remove(lbRight.SelectedItems[0]); } } } } }
Mutasd a teljes hozzászólást!
Tehát a kérdésedre az a válasz hogy elgépelted A "SelectedItem"-et, "SelectedItems"-re.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd