Supi, danke! Dann werde ich's wohl so lösen.
Für sauberere Vorschläge bzw. Anwendung von irgendwelchen Patterns bin ich natürlich weiterhin offen. Schließlich ziehe ich hier aus einem Objekt ein anderes Objekt raus und manipuliere es wieder in einem anderen Objekt
Ich habe immer mal so Probleme, wie ich den Zugriff auf solche Klassen lösen kann, in denen ich alle Daten speicher.
MFG Stefan
Edit: Nochmal 'ne Frage: Das geht also sicher nicht, dass ich als
Parameter einen Funktionsaufruf übergebe (da diese Funktion schließlich den gewünschten Parameter zurückgibt)? Ist eigentlich schade! In C++ war das doch immer so schön möglich. Aah, gerade nochmal ausprobiert. Geht nur nicht mit ref. Warum?
Mittlerweile bin ich schon etwas weitergekommen: Ich habe den Code etwas optimiert und meine generelle Taktik geändert. Ich erstelle keine neue List sondern reihe die Alte einfach um. Das Problem dabei ist, dass die ListView Komponente keine Umreihungen in meinem View-Mode (LargeIcons) erlaubt. Also setze ich den View temprär auf List, ordne dann die Items neu an und setze den View wieder zurück. Das blöde an der Sache ist, dass das Zurücksetzten auf LargeIcons nicht funktioniert und ich verstehe einfach nicht warum.
Hier ist der neue Code:
private void lvPhotos_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
// get the new location of the items
Point p = lvPhotos.PointToClient(new Point(e.X, e.Y));
int destIndex = lvPhotos.GetItemAt(p.X, p.Y).Index;
// create a new ListViewItems array
ListViewItem[] selItems = new ListViewItem[lvPhotos.SelectedItems.Count];
int[] selIndices = new int[lvPhotos.SelectedIndices.Count];
// create the listViewItems array that will be used instead of the currently displayed one
ListViewItem[] newItems = new ListViewItem[lvPhotos.Items.Count];
for(int i = 0; i < selItems.Length; i++)
{
if(lvPhotos.SelectedIndices[i] == destIndex) // if any of the selectedIndices is equal to the destIndex abort the operation
return;
// fill the array with the currently selected items
selItems[i] = (ListViewItem) lvPhotos.Items[lvPhotos.SelectedIndices[i]].Clone();
// add the current selectedIndex to the selIndices array
selIndices[i] = lvPhotos.SelectedIndices[i];
}
// rearrange the photos in the album and break the operation if it can't be saved
if(DoAlbumDragDrop(selIndices, destIndex) == false)
return;
// switch the lvPhotos view to List, since we can't edit the item arrangement in LargeIcon view
lvPhotos.View = View.List;
// add the items to lvPhotos
for(int i = selItems.Length - 1; i >= 0; i--)
lvPhotos.Items.Insert(destIndex, selItems[i]);
// remove the old items from lvPhotos
foreach(ListViewItem item in lvPhotos.SelectedItems)
lvPhotos.Items.Remove(item);
// create a temp ImageList
ImageList ilTemp = new ImageList();
// fill the temp il with the photos in rearranged order
for(int i = 0; i < ilThumbs.Images.Count; i++)
{
if(i == destIndex)
{
int j;
for(j = selIndices.Length - 1; j >= 0; j--)
ilTemp.Images.Add(ilThumbs.Images[j]);
j = 0;
for(i = i; i < ilThumbs.Images.Count; i++)
{
if(i == selIndices[j])
j++;
else
ilTemp.Images.Add(ilThumbs.Images[i + j]);
}
break;
}
ilTemp.Images.Add(ilThumbs.Images[i]);
}
// replace the current il with ilTemp
ilThumbs.Images.Clear();
for(int i = 0; i < ilTemp.Images.Count; i++)
{
ilThumbs.Images.Add(ilTemp.Images[i]);
lvPhotos.Items[i].ImageIndex = i;
}
// reset the lvPhotos view
lvPhotos.View = View.LargeIcon;
}
Da hast du Recht, das hab ich leider nicht bedacht. Dabei ist ja gerade sowas schön, wenn man es in der Klassenbibliothek finden könnte (z.B. bei sort mit Comparator<? super T>).
Servus,
leider hast du deine Frage im falschen Forum gestellt. Hier ist nur "C#" und alles was mit ".NET" zu tun hat. Ich würde mal behaupten du bist besser im ANSI C Forum aufgehoben.
Hellsgore
Die .NET Framework Doku ist im großen und ganzen mit der im Netz identisch.
Alle Member der Klassen sind in der offline Doku erklärt.
Schon mal im TreeView unter Reference/Class Library geschaut.
Ich sag nur: Augen aufmachen
Ich hatte ein ähnliches Problem und habe deswegen meine eigene XML Library TXML geschrieben. Sie ist zwar so konzipiert um vorhandene Elemente zu überscreiben, da du aber angeben kannst, den wievielten Node, mit dem Namen x, du überschreiben willst, kannst du die neuen Daten auch Problemlos hinzufügen ohne die alten zu überschreiben.
hallo,
ich hab noch nicht verstanden wie eine multi modul assembly erstellt wird und versuche es an 2 einfachen Klassen.
ich hab 2 .cs files
(ClassOne.cs)
namespace ProgrammCS
{
public class ClassOne {..}
}
(ClassTwo.cs)
namespace ProgrammCS
{
public class ClassTwo {..}
}
und noch eine makefile.
Jetzt fehlt noch eine AssemblyInfo.cs file damit nach dem Aufruf von nmake
in dem Ordner 3 dlls entstehen können. ClassOne.dll ClassTwo.dll und eine dll file, deren namen ich in der makefile festgelegt hab.
Kann mir jemand helfen und sagen wie ich diese AssemblyInfo.cs schreibe und wie ich ein Treiberprogramm scheibe, das die Module nach bedarf läd.
Achtung, böses Misverständnis
So etwas wie include gibt es in C# nicht und braucht man auch nicht. using macht genau das, was using in C++ macht: einen Namen qualifizieren. Ich muss also theoretisch nie irgendwas usen, um es benutzen zu können, ich muss dazu nur den voll qualifizierten Namen mit allen Namespaces hinschreiben.
Zur Frage: Ist deine Klasse und dein Programm im selben Assembly? Wenn ja, dann poste doch mal etwas Code. Wenn nein, dann musst eine Abhängigkeit zwischen den Assemblies herstellen, in Visual Studio geht das mit einem Rechtsklick auf References -> Add, amsonsten musst du mal nachschauen, welche Parameter der Linker dafür will.
Hallo Communitonen,
hat jemand von Euch schon das PlugIn der Ecplise für .NET eingesetzt?
http://www.eclipse-plugins.info/eclipse/plugin_details.jsp?id=500
Wenn Ja wie sind Eure Eindrücke und Ergebnisse?
Vielen Dank.
P84
public enemy schrieb:
man könnte auch über die Controls Eigenschaft auf die Buttons zugreifen...
Das würde mich auch interessieren, ich verstehe aber noch nicht ganz, wie ich das machen muss.
Hat da bitte jemand ein Beispiel? In C++, wenn möglich
_______________________________________________________________
EDIT:
Inzwischen habe ich selbst was hinbekommen:
IEnumerator* enumerator = this->Controls->GetEnumerator();
System::Windows::Forms::Button * tmpButton;
while(enumerator->MoveNext())
{
tmpButton = static_cast<System::Windows::Forms::Button *>(enumerator->Current);
tmpButton->Image = Image::FromFile(S"Grafiken/0.gif");
}
In dem Beispiel werden alle Buttons der Form mit der Grafik 0.gif belegt.
Guten Moregen,
wenn die Zeit nicht immer so drängen würde das wäre doch schön. Eine Nacht geschlafen und so sieht ein nicht optimales aber auf die Schnelle nutzbares Ergebnis aus.
Die Ereignishandle den Ereignissen GotFocus und LostFocus zuweisen
this.GotFocus += new EventHandler(FormKarte_GotFocus);
this.LostFocus +=new EventHandler(FormKarte_GotFocus);
Um bei Groessenaenderungen, Abdeckungen oder dem Verschieben mit den Scrollbars die Grafiken neu zu zeichnen muessen die nachstehenden Ereignisshandle genutzt werden.
private void FormKarte_Paint(object sender, ystem.Windows.Forms.PaintEventArgs e)
{
TNRefresh();
}
private void pictureBoxKarte_Move(object sender, System.EventArgs e)
{
TNRefresh();
}
private void FormKarte_GotFocus(object sender, EventArgs e)
{
TNRefresh();
}
Einen erfolgreichen Tag und ein schönes Wochenende
Evi48
Hallo,
ich bin dabei und schreibe ein Programm mit einer TCP-Verbindung. Durch das Abfrangen mit einer Exceprion kann ich feststellen ob die Verbindung getrennt wurde. In HResult von IOException könnte ich nun nachfragen um welche Fehlernummer es sich handelt, doch leider ist es eine geschützte Eigenschaft. Wo bekomme ich diesen Wert noch her oder wie kann ich auf die Eigenschaft zugreifen?
Danke
Evi48