Zum Thema Standardverzeichnis:
Kannst Du auf Deinem PC herausfinden, in welchem Ordner die Datei wie z.B. DSC12345.jpg liegt?
In Deinem Bild hast Du ein
underlyingDataObject vom Typ
System.Windows.Forms.DataObject.
So wie es aussieht, kannst Du über dessen GetImage an das Image = Bitmap herankommen.
DataObject.GetImage Methode (System.Windows.Forms)
und dann
Bitmap bitmap = new Bitmap(image);
Vielleicht sowas in der Art? Ist ungetestet.
public class Kiste
{
public string Bezeichnung { get; set; }
public int Laenge { get; private set; }
public int Breite { get; private set; }
public int Hoehe { get; private set; }
public int Volumen { get {return Laenge * Breite * Hoehe;}}
public Kiste(int Laenge, int Hoehe, int Breite)
{
this.Laenge = Laenge;
this.Breite = Breite;
this.Hoehe = Hoehe;
}
public void Ausgabe()
{
Console.WriteLine("Maße von {0}", this.Bezeichnung); //Überschrift
Console.WriteLine("\tLänge:\tBreite:\tHöhe:\tVolumen:"); //ein Versuch soetwas wie eine Tabelle zu basteln
Console.WriteLine(
"\t{0}\t{1}\t{2}\t{3}",
this.Laenge, this.Breite, this.Hoehe, this.Volumen
);
}
}
static void LagerraumFuellen(Kiste[] lagerraum)
{
{
var kiste = new Kiste(5, 3, 3);
kiste.Bezeichnung = "Bierkasten";
lagerraum[4] = kiste;
}
{
var kiste = new Kiste(4, 7, 8);
kiste.Bezeichnung = "Tupperdose";
lagerraum[11] = kiste;
}
}
static void Ausgabe(Kiste kiste)
{
if (kiste == null)
{
Console.WriteLine("\tKeine Kiste vorhanden.");
return;
}
else
{
kiste.Ausgabe();
}
Console.ReadLine();
}
static void Main()
{
Kiste[] lagerraum = new Kiste[75];
LagerraumFuellen(lagerraum);
char eingabe = '4';
switch (eingabe)
{
case '4':
Kiste kiste = lagerraum[4];
Ausgabe(kiste);
break;
default: break;
}
}
Nativ sollte das mit einem RecyclerView gar keine Probleme bereiten. Es kann tausend Datensätze problemlos anzeigen.
Hierzu habe ich folgenden Link gefunden:
https://github.com/dotnet/maui/issues/21554
Zitate:
(...) CollectionView seems to be really struggling on Android, especially when you scroll through the items quickly. #21554 (...)
(...) Potential solution: GO NATIVE
After digging for hours through recorded scopes and trying to optimize the layout of item templates I found out that the only solution was to write the layout natively. I translated the real-world-complex from XAML to android XML. I setup the RecyclerView to use my layout and bind my collection of items through the adapter. (...)
Vielleicht hilft diese Information
Gehe nicht davon aus, dass listView1.SelectedItems[0] existiert.
Wenn Du nichts auswählst, dürfe spätestens dann listView1.SelectedItems.Count == 0 sein und listView1.SelectedItems[0] würde dann nicht existieren --> Index out of Range.
oder
SomeClass someObject = obj as SomeClass;
if (someObject != null)
{
//Cast erfolgreich
...
}
Ich stimme P!lle bei.
#nullable liest sich für mich auf dem ersten Blick als #nullableValuesAreNowAllowed und nicht als
#nullableExplicit oder #nullableReferenceTypes.
Die Benennung #nullableExplicit oder #nullableReferenceTypes hätte ich wesentlich besser empfunden.
Mein erster Gedanke war:
public partial class Form1 : Form
{
//Dem Form1 noch folgendes hinzufügen:
//
// * TextBox mit Namen textBoxEingabe
// * TextBox mit Namen textBoxAusgabe
// * Ereignis Form1_Load
// * Ereignis textBox1_TextChanged
public Form1()
{
InitializeComponent();
}
List<Kombi> _kombis;
private void Form1_Load(object sender, EventArgs e)
{
_kombis = new List<Kombi>();
_kombis.Add(Kombi.GetKombi("Dreier", "1|1|2"));
_kombis.Add(Kombi.GetKombi("Dreier", "2|4|6"));
_kombis.Add(Kombi.GetKombi("Dreier", "3|7|8"));
_kombis.Add(Kombi.GetKombi("Dreier", "4|10|12"));
_kombis.Add(Kombi.GetKombi("Dreier", "5|7|1"));
_kombis.Add(Kombi.GetKombi("Dreier", "6|4|10"));
_kombis.Add(Kombi.GetKombi("Vierer", "7|1|2|7"));
_kombis.Add(Kombi.GetKombi("Vierer", "8|4|6|10"));
_kombis.Add(Kombi.GetKombi("Vierer", "9|7|8|1"));
_kombis.Add(Kombi.GetKombi("Vierer", "10|10|12|4"));
_kombis.Add(Kombi.GetKombi("Vierer Würfel", "11|1|10|11"));
_kombis.Add(Kombi.GetKombi("Vierer Würfel", "12|1|4|5"));
_kombis.Add(Kombi.GetKombi("Vierer Würfel", "13|4|7|3"));
_kombis.Add(Kombi.GetKombi("Vierer Würfel", "14|7|9|10"));
_kombis.Add(Kombi.GetKombi("Vierer Neuner", "15|2|6|14"));
_kombis.Add(Kombi.GetKombi("Vierer Neuner", "16|6|8|15"));
_kombis.Add(Kombi.GetKombi("Vierer Neuner", "17|8|12|16"));
_kombis.Add(Kombi.GetKombi("Vierer Neuner", "18|2|12|13"));
_kombis.Add(Kombi.GetKombi("Fünfer", "19|1|2|7|8"));
_kombis.Add(Kombi.GetKombi("Fünfer", "20|4|6|10|12"));
_kombis.Add(Kombi.GetKombi("Knickfünfer", "21|1|2|4|6"));
_kombis.Add(Kombi.GetKombi("Knickfünfer", "22|4|6|7|8"));
_kombis.Add(Kombi.GetKombi("Knickfünfer", "23|7|8|10|12"));
_kombis.Add(Kombi.GetKombi("Knickfünfer", "24|10|12|1|2"));
_kombis.Add(Kombi.GetKombi("T-Fünfer", "25|1|2|4|10"));
_kombis.Add(Kombi.GetKombi("T-Fünfer", "26|1|4|6|7"));
_kombis.Add(Kombi.GetKombi("T-Fünfer", "27|4|7|8|10"));
_kombis.Add(Kombi.GetKombi("T-Fünfer", "28|1|7|10|12"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "29|1|10|11|2"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "30|1|10|11|12"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "31|1|4|5|2"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "32|1|4|5|6"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "33|4|7|3|6"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "34|4|7|3|8"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "35|7|9|10|8"));
_kombis.Add(Kombi.GetKombi("Würfel Fünfer", "36|7|9|10|12"));
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
//int[] istwerte = Werte.GetWerte("8|5").ToArray();
int[] istwerte = Werte.GetWerte(textBoxEingabe.Text).ToArray();
List<string> trefferTexte = new List<string>();
foreach (var kombi in _kombis)
{
if (kombi.Treffer(istwerte))
{
trefferTexte.Add(kombi.Anzeige());
}
}
if (trefferTexte.Count == 0)
{
textBoxAusgabe.Text = "Keine Kombi";
}
else
{
textBoxAusgabe.Text = string.Join(", ", trefferTexte.ToArray());
}
}
catch (ArgumentException ex)
{
textBoxAusgabe.Text = ex.Message;
}
}
}
public static class Werte
{
public static int[] GetWerte(string text)
{
if (string.IsNullOrEmpty(text)) throw new ArgumentException("Keine Werte angegeben.");
string[] felder = text.Split('|');
List<int> ziel = new List<int>();
{
foreach (var feld in felder)
{
int wert;
if (!int.TryParse(feld, out wert))
throw new ArgumentException("Keine gültiger Wert (\"" + feld + "\").");
ziel.Add(wert);
}
}
return ziel.ToArray();
}
}
public class Kombi
{
//Eigenschaften:
private string _Name = string.Empty;
public string Name { get { return _Name; } }
private List<int> _Sollwerte = new List<int>();
public List<int> Sollwerte { get { return _Sollwerte; } }
public static Kombi GetKombi(string name, string text)
{
Kombi ziel = new Kombi();
{
ziel._Name = name;
ziel._Sollwerte = new List<int>(Werte.GetWerte(text));
}
return ziel;
}
public string Anzeige()
{
List<string> solltexte = new List<string>();
foreach (var sollwert in _Sollwerte)
{
solltexte.Add(sollwert.ToString());
}
return _Name + ": " + string.Join("|", solltexte);
}
public bool Treffer(params int[] istwerte)
{
if (istwerte == null) return false;
if (istwerte.Length != _Sollwerte.Count) return false;
List<int> istrest = new List<int>(istwerte);
foreach (var sollwert in _Sollwerte)
{
int istrestIndex = istrest.IndexOf(sollwert);
if (istrestIndex == -1) return false;
istrest.RemoveAt(istrestIndex);
}
return true;
}
}
Nachfolgend ein Link zum Verschwinden der Menüleisten:
Controls disappear from a form although they are still in the Designer code
Generell sollte man die Designer.cs nicht editieren. Stimmt schon.
Aber ich denke um die Menüleisten wiederherzustellen, kann man die Designer.cs editieren. Geht wesentlich schneller und ist sauberer als alle Menüeinträge neu zu erstellen. Vorausgesetzt man hält sich an die Designerschreibweise, wüsste ich jetzt nichts, was dagegen spricht.