Hat Siemens auch Beispiel-Projekte mitgeliefert ?
Funktionieren diese auf Deinem Rechner ? Wenn Diese funzen, dann machst Du was falsch und kannst in diesen Projekten schauen was wie referenziert wird....
Wenn diese nicht funzen, dann liegt es an der Installation...
Entweder liegt die Tecnomatix.Engineering dll nicht in der richtigen Version im Verzeichnis ( Version=11.0.0.440 )... oder diese dll verwendet noch weitere Dll's welche nicht gefunden werden !
Schau mal wie das in einer ListBox geht: Listbox für Bilder
Hier nur noch eine viel einfachere Möglichkeit:
private bool _InItemCheckEvent = false;
void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (this._InItemCheckEvent)
{
return;
}
this._InItemCheckEvent = true;
bool blnChecked = (e.NewValue == CheckState.Checked);
if (e.Index == 0) //Alle
{
for (int i=1;i<this.checkedListBox1.Items.Count;i++)
{
this.checkedListBox1.SetItemChecked(i,blnChecked);
}
}
else
{
if (blnChecked)
{
this.checkedListBox1.SetItemChecked(0, this.checkedListBox1.CheckedItems.Count == this.checkedListBox1.Items.Count - 2);
}
else
{
this.checkedListBox1.SetItemChecked(0, this.checkedListBox1.Items.Count-this.checkedListBox1.CheckedItems.Count == 1);
}
}
this._InItemCheckEvent = false;
}
Eigentlich nur eine Spezielle Art von: Rucksackproblem
Mein erstes Projekt war eine Kapselung von VBHLLAPI ... rausgekommen ist dabei die Fernsteuerung von 3270-Sessions eines IBM OS 390-Hosts per VB 3.
Aha jetzt verstehe ich endlich wieso es hier Leute mit so vielen Posts gibt:-)
Das war jetzt natürlich nicht wirklich ernst gemeint 😃
Und SHIFT+Insert ?
Hier noch meine Implementierung:
public static bool Contains<T>(this IEnumerable<T> source, IEnumerable<T> needle, IEqualityComparer<T> comparer)
{
if (!needle.Any())
{
//wenn b leer ist, dann sind alle aus needle (also keine) in source enthalten
return true;
}
bool ret = false;
IEnumerator<T> enumerA = source.GetEnumerator();
var bFirst = needle.First();
int iAOffset = 0;
while (enumerA.MoveNext())
{
//zuerst nur gegen das erste element aus needle vergleichen
if (comparer.Equals(enumerA.Current, bFirst))
{
//das erste Item von needle passt schon mal
ret = true;
//einen inneren Enumerator ziehen und auf den äusseren synchronisieren
IEnumerator<T> innerA = source.Skip(iAOffset).GetEnumerator();
IEnumerator<T> innerB = needle.GetEnumerator();
while (ret)
{
if (innerB.MoveNext())
{
//verschiebe auch A
if (innerA.MoveNext())
{
ret = comparer.Equals(innerA.Current, innerB.Current);
}
else
{
//InnerA ist am Ende also kann B nicht mehr matchen
ret = false;
break;
}
}
else
{
if (ret)
{
//InnerB ist am Ende und ret ist true also kann die Suche abgebrochen werden
return ret;
}
}
}
}
iAOffset += 1;
}
return ret;
}
source: a; b; c; d; e; f; g; needle: Erwartet: True Result: True
source: a; b; c; d; e; f; g; needle: b; a; Erwartet: False Result: False
source: a; b; c; d; e; f; g; needle: a; b; Erwartet: True Result: True
source: a; b; c; d; e; f; g; needle: e; f; g; Erwartet: True Result: True
source: a; b; c; d; e; f; g; needle: f; g; h; Erwartet: False Result: False
source: a; b; c; d; e; f; g; needle: f; g; g; Erwartet: False Result: False
source: a; b; c; d; e; f; g; needle: a; c; e; Erwartet: False Result: False
source: a; b; c; d; e; f; g; needle: a; b; b; Erwartet: False Result: False
source: a; b; c; d; e; f; g; needle: a; h; Erwartet: False Result: False
Passt oder habe ich was übersehen ?
Gruss
Programmierhans
Mach mal ein BeginEdit vor
und EndEdit nach dem setzen.
@HiGHteK
Die Lösung ist falsch.
source: a; b; c; d; e; f; g; needle: b; a; Erwartet: False Result: False
source: a; b; c; d; e; f; g; needle: a; b; Erwartet: True Result: True
source: a; b; c; d; e; f; g; needle: e; f; g; Erwartet: True Result: True
source: a; b; c; d; e; f; g; needle: f; g; h; Erwartet: False Result: True
source: a; b; c; d; e; f; g; needle: f; g; g; Erwartet: False Result: True
source: a; b; c; d; e; f; g; needle: a; c; e; Erwartet: False Result: False
Gruss
Programmierhans
Leider enthällt deine Lösung einige Fehler:
Du kannst nicht davon ausgehen, dass die Klasse ToString korrekt implementiert, und vorallem kannst du nicht davon ausgehen, dass Die ToString zuordnung eindeutig ist
😃 Es ist eine ganz schmerzfreie Implementierung nur genau für dieses Szenario (mit den strikt aufeinander folgenden Strings)... das bin ich mir durchaus bewusst... deshalb auch der Hinweis dass es eine sehr plumpe Lösung ist.
Aber schön dass es jemand gemerkt hat 😃... meine Lösung war ja auch mehr als Scherz gedacht 😃
PS: In genau diesem Szenario würden die Ergebnisse passen.
Gruss
Programmierhans
Wir haben in einer einzigen Anwendung einen über die Tastatur geschleiften Scanner (ansonsten native).
Wir verlangen im Barcode Präfix und Suffix...
[vomScanner]
vonTastatur
So kannst Du das unterscheiden.
--> also im Prinzip eine der von trib vorgeschlagenen Methoden.
Funzt jeden Tag ohne Problems.
Gruss
Programmierhans
Zugegeben eine plumpe Lösung:
public static bool Contains<T>(IEnumerable<T> enumerable, IEnumerable<T> item, IEqualityComparer<T> comparer)
{
StringBuilder sbA = new StringBuilder();
StringBuilder sbB = new StringBuilder();
foreach (var a in enumerable)
{
sbA.Append(a.ToString());
}
foreach (var b in item)
{
sbB.Append(b);
}
return sbA.ToString().IndexOf(sbB.ToString())>-1;
}
Google-Suche nach msdn DataFormats.Bitmap
Nachtrag: IDataObject.GetFormats-Methode
Du kannst ja prüfen was alles im e.Data verfügbar ist... Nur was verfügbar ist kannst Du auch verwenden...
private void levelPanel_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Bitmap)) <------------ { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void levelPanel_DragDrop(object sender, DragEventArgs e) { string[] filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop)); <--------- foreach (string fileLoc in filePaths) { if (File.Exists(fileLoc)) { try { Point localPoint = levelPanel.PointToClient(new Point(e.X, e.Y)); AddSprite(fileLoc, localPoint.X, localPoint.Y); } catch { MessageBox.Show("Falsches Datenformat?" + "\nErlaubt Formate sind: *.png, *.jpeg, *.bmp ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } }
Schau mal die Pfeile... und klingelts ?
Schau Dir mal das hier an:
UserControl kann im Designer nicht hinzugefügt werden
So kannst Du mal prüfen welcher Code deiner BasisView im Designer auf die Bretter geht...
Und ev. verstehst Du dann was ich in meinem vorherigen Post gemeint habe (wie Du über ein Flag problematischen Code im Designer umgehen kannst).
Gruss
Programmierhans
Ohne jetzt alles im Detail zu lesen:
Wieso machst Du in der BaseClass nicht 2 Constructors...
Je nach Constructor kannst Du Dir dann ein Flag setzen ob problematischer Code ausgeführt werden soll oder nicht.
Gruss
Programmierhans
Looooool
Vergesst es... ich bin so was von blind....
Im EXE ist der Code auch in einer #IF DEBUG-Region...
Sprich der Code des Addin wird nicht aufgerufen weil das im EXE auch so ist.
Ist somit erledigt.
Danke für die Hilfe
Gruss der Blinde
definier eine andere Variable als DEBUG, welche auch im Release Build definiert ist.
Hallo Björn
Ich präzisiere es noch ein wenig:
Ziel: Wenn mein Addin in DEBUG ist, dann möchte ich dass die #if DEBUG Statements aktiv sind... wenn ich in RELEASE bin, dann sollen diese nicht aktiv sein.
Eine weitere Variable im HOST ändert daran nichts... Ich will ja eben den Host nicht wechseln müssen 😃
PS: sonst kann ich ja auch den Host auswechseln (Debug/Release-Version)... und genau das möchte ich nicht.
Gruss
Programmierhans
Auch das hatten wir schon mal:
Rekursiver TreeView Save/Restore aufgrund des FullPaths
Gruss Programmierhans
Hallo Miteinander
Ich habe ein Dll welches als DEBUG gebuildet ist.
In diesem Dll verwende ich an diversen Stellen
#if DEBUG
Wenn der Host (welcher das Dll lädt) als Release gebuildet ist, dann läuft der Code im #if DEBUG nicht ein.
Kann man das irgendwie anpassen ?
Ziel: Host ist Release-Build / Dll ist Release oder Debug.
Gruss
Programmierhans
Verzögertes Laden von Daten im TreeView
Oder dessen Base LoadOnDemandTreeView (suche verwenden)
Lies Dir das schon mal durch (da geht's zwar um Excel... ist aber das selbe)
Damit Du die Objekte auch wieder sauber schliessen kannst.
Gruss
Programmierhans
Da Du eh gleich auf einen Fehler laufen wirst 😃
Ein Remove aus einer Collection während Du über diese iterierst wird nicht funktionieren.
Gruss
Programmierhans
Könnte auch daran liegen dass dass WorkSheet noch referenziert wird...
Guck mal da: EXCEL wirklich schliessen
Ev. findest Du hier noch Code:
Ein einfaches RecreateHandle auf dem TabControl und schon dreht sich die Erde wieder.
((System.Reflection.MethodInfo)typeof(TabControl).GetMethod("RecreateHandle", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod)).Invoke(this.tabControl1,null);
Gruss
Programmierhans
Kommt mir bekannt vor...
Einer unserer Kunden verzögert auch gerne Rechnungen (wenn 1 Position bestritten wird, dann wird die ganze Rechnung zurückbehalten)....
Ein nettest Mail geschickt, dass bei Nichtbezahlung der Wartungsgebühren die Wartung bis zur vollständigen Bezahlung eingestellt wird hat da Wunder bewirkt.
Gewisse Kunden brauchen einfach den Zwang 😃
Der Fehler sagt ja ganz klar welches Problem Du hast. (vermutlich eine Collection geändert während Du darüber iterierst).
Im VisualStudio gehst Du auf Debuggen/Ausnahmen
Dann bei Common Language Runtime Exceptions bei Ausgelöst einen Haken setzten.
Dann lässt Du Deine Anwendung wieder laufen.
Wenn die Exception ausgelöst wird, dann stehst Du auf der verursachenden Zeile (vermutlich in einem foreach).
Gruss
Programmierhans
Wieso nicht direkt ?
Du reichst ja nur das Visilbe Property des Buttons durch. Und vermutlich macht die TabPage den unsichtbar.
Speichere den Wert in einem eigenen Property.
Control.DesignMode ist tückisch
Guckst Du Designer hat Probleme mit meinem Control
np dafür ist ja das Forum da.
Möge der Designer mit Dir sein. 😃
Debug es mal wenn es im Designer gehostet wird.
Guck hier habe ich mal beschrieben wie man so was debuggen kann: (nicht alles lesen... nur wie Du es Debuggen kannst)
UserControl kann im Designer nicht hinzugefügt werden
Ev. läuft Dein Load nicht durch... oder this.Visible im Load tut nicht das was Du denkst 😃
Alternative Idee
Dictionary<ListItem,object> dictAdditionalPropertiesForListItem
Jedes ListItem in diese liste mit dem zugehörigen object (welches Du in das Tag reinschreiben wolltest)...
So kannst Du dann jederzeit über das Dictionary auf dein Tag-Objekt zugreifen.
Auch mir hat das Teil sehr bei der Ausarbeitung von Ausdrücken geholfen (und nochmal ein Dank an herbivore).
Nur so als Tipp: Wenn ein Ausdruck im Tester funktioniert... aber im .Net Code nicht, dann kann es eigentlich fast nur daran liegen, dass per Default im Tester IgnoreCase geflaggt ist... (Habe ich dann nach mehr als 20 minütiger Suche auch irgendwann festgestellt).
Nein
Du kannst ja leicht ermitteln welche Geräte im Moment verliehen sind.
Mach doch einen NOT IN Select auf die verliehenen Geräte.
PS: Habe schon seit Jahren kein SQL mehr gebraucht... deshalb mache ich auch keinen Vorschlag wie das in SQL genau aussehen müsste.
Such mal hier im Forum (Etiketten) das wurde schon bis zum Abwinken diskutiert.
Hast Du mal versucht beim SetParent das Handle deines Panels (statt des Forms) zu übergeben ?
Ist zwar VB.Net aber vermutlich genau das was Du suchst...
Gewusst wie: Senden von Rohdaten an einen Drucker mithilfe von Visual Basic .NET
Ich finde hier keinen Bezug zu meiner Frage. Die Form-Instanz existiert ja nach der Beendigung des Moduls nicht mehr.
Ja die Form nicht... aber du könntest ja eine Ref auf das Panel halten und dieses später wiederverwenden...
Aber wenn Du das nicht vestehst, dann fehlt es wirklich an Grundlagen.
Gruss
Programmierhans
Hallo Zusammen
Form-->Panel-->VieleControls
Vor dem Wegschmeissen des Forms machst Du ein Form.Controls.Remove(Panel).
Wenn Du ein neues Form brauchst, wieder Form.Controls.Add(Panel).
Das sind aber wirklich Grundlagen der allerersten Stunde....
Gruss
Programmierhans
Bleibt hängen... tönt nach Deadlock...
Wo (im UI-Thread) hast du den Thread gestartet und was machst Du dann im UI-Thread ? hast Du da ev. ein Thread.Join auf genau diesen Thread drin ? Dann würde der Join den UI-Thread blockieren und der Invoke kommt dann nicht rein...
Gib mal ein wenig mehr Code ...
Gruss
Programmierhans
PS: Wenn der Code stillsteht... schau mal im Threads-Window wo die einzelnen Threads stehen... steht davon einer auf einem .Join ?
Hallo herbivore
Nicht schlecht die Idee... wobei bei einem Event kann ich das Pragma nur als Member des Typen einfügen (es kommt dann einfach immer ganz am Anfang der Klasse)...
ctdB.Members.Add(new CodeSnippetTypeMember("#pragma warning disable 0108"));
Aber so ist die Warnung nun weg.
Danke sehr vielmals
Gruss
Programmierhans