Laden...

Forenbeiträge von Jochen1980 Ingesamt 111 Beiträge

24.09.2020 - 13:23 Uhr

kostenlose Alternativen hab ich noch keine gesehen, ein Tipp wäre nicht schlecht.

24.09.2020 - 11:54 Uhr

Hallo zusammen,

ich habe folgendes Problem zu dem ich leider keine Lösung finden kann.
In meiner Anwendung zeige ich PDFs mit Hilfe des AxAcroPDF controls an.
Wenn die Anwendung als x86 erstellt wird, so kann das PDF erfolgreich geöffnet werden.
Wird die Anwendung jedoch als x64 erstellt, so kann das Control nicht geladen werden.
Fehlermeldung: System.Runtime.Interop.COMException: Klasse nicht registriert

Wenn ich alternativ dazu ein Webbrowser Control nehme, so kann auch in der x64 Version meiner Anwendung das PDF geöffnet werden. Wäre eine Lösung, jedoch möchte ich in dem Dokument navigieren. Zwar kann man mit

 webbrowser.Navigate(@"[URL]#page=15");

zu Seite 15 navigieren. Möchte man jedoch bspw. auf Siete 25 navigieren, so ist ein erneuter Aufruf von Navigate nicht erfolgreich.

Habt ihr eine Lösung für das AxAcroPDF Problem?

18.07.2018 - 10:31 Uhr

@emuuu: vielen Dank für den Hinweis, Bootstrap ist auch sehr Interessant und der Ansatz "Mobile First" ist echt gut!

18.07.2018 - 08:44 Uhr

Die Anwendung lokal auf einem Server zu installieren ist nicht nur kein Problem sondern grundlegende Voraussetzung.
Grundsätzlich ist unser Mutterkonzern eine Maschinenfabrik. Unsere Kunden werden die Software als optionalen Zusatz zu den Maschinen kaufen können. Sie werden davon ausgehen, dass man die Software OHNE Internetverbindung nutzen kann. Somit muss die Anwendung lokal im Intranet laufen und entsprechend auch installiert sein.
Wenn ich deine Aussage bzgl. MVC richtig verstehe dann heißt das, dass wir den Client auch mit MVC entwickeln können und dennoch "Up-to-date" sind?
Mit "möglichst einfach" meine ich folgendes (und daher auch Einleitend der Hinweis auf ein CMS): Bei manchen CMS sind die erzeugten Seiten direkt auch für bspw. Mobile Devices optimiert. Adaptiere ich das auf mein Projekt, so hätte ich es natürlich sehr gerne, dass das entwickelte UI direkt auch in einer anderen View für Tablet/Smartphone optimiert ist, also der Content sich anpasst bzw. angepasst dargestellt wird.

17.07.2018 - 15:57 Uhr

Erstmal vielen Dank für eure Antworten! Ihr helft mir wirklich so langsam in die richtige Richtung zu denken.
@MrSparkle: bzgl. der Spezifikation hatte ich in meinem ersten Post schonmal ein paar Anforderungen geschrieben:

  • Es sollen sowohl Desktop Clients als auch Tablet/Mobile Clients unterstützt werden
  • wir möchten am liebsten weiterhin mit C# entwickeln
  • die Lösung sollte möglichst "einfach" sein, auch wenn dies ggf. Einschränkungen mit sich bringt.
  • die Anwendung wird IST-Werte eines Prozesses darstellen, sie wird Wirtschaftlichkeitsberechnungen ausführen, sie wird Aufträge anlegen und verwalten müssen [...]
  • sie wird im INTRANET betrieben werden, Internet ist nicht nötig.
  • bei der Web-Architektur geht es uns vor allem um die problemlose Skalierbarkeit der Clients

@codesoldier: Danke dir, werde ich mir anschauen.

Was ich bislang recht interessant finde ist CSHTML5. Kennt das jemand bzw. hat damit jemand Erfahrung? Auf der ersten Blick sah mir das ganz brauchbar aus. Allerdings habe ich noch nichts bzgl. Desktop/Mobile Client und der nötigen automatischen Anpassung des Präsentation gefunden.

Bzgl. CMS: Ich möchte kein CMS entwickeln, vielleicht habe ich mich hier etwas falsch ausgedrückt.

17.07.2018 - 14:52 Uhr

Hab ich das richtig verstanden, dass man ASP.net nicht mehr zu Präsentationszwecken verwendet?

Die Lösungen wäre nun:

  • HTML5 als Präsentation
  • React / Angular als Präsentation
  • Blazor (Prototyp) als Präsentation

Serverseitig wird dann ASP.Net eingesetzt? Oder gibt es hierzu auch noch Alternativen die in unserem Szenario ebenso passen würden?
Unser Ziel ist es natürlich, so viel Servercode wie möglich vom bestehenden Projekt zu verwenden.

17.07.2018 - 12:57 Uhr

Hallo Abt,
danke für deine schnelle Antwort. Das hilft mir schonmal etwas.
Es ist schon Zeit für das Projekt vorhanden, so 2 MJ sollten drin sein.
Gibt es denn bzgl. Präsentation auf unterschiedlichen Clients etwas "fertiges"?

17.07.2018 - 12:16 Uhr

Hallo zusammen,

wir sind eine kleine Softwarefirma und haben eine Rich-Client Softwarelösung für einen sehr speziellen Kundenkreis am Markt (soll heißen, es gibt nicht so sonderlich viele Kunden). Bei der Softwarelösung geht es um die Präsentation von unterschiedlichen IST-Werten eines Prozesses sowie die Verwaltung von Workflows.
Wie erwähnt ist die Anwendung zurzeit eine Client-Server Lösung mit Rich Clients. Die Clients sind mit WPF entwickelt.
ZIEL: Diese Architektur soll in eine webbasierte Architektur überführt werden. Wir möchten gerne sowohl Desktop-PCs als auch Tablets und Smartphones als Clients unterstützen.
Da wir eine recht kleine Firma sind, muss das ganze wirtschaftlich bleiben. Daher hoffe ich auf eure Hilfe in Bezug auf die Selektion der richtigen Technik. Primär geht es um die Visualisierung, die serverseitige Software sowie die Datenbank soll weiter verwendet werden.
Anforderungen:

  • Eine Visualisierung die sich dem jeweiligen Client anpasst (Desktop-PC, Tablet, Smartphone)
  • .Net als Framework
  • die Lösung sollte möglichst "einfach" sein, auch wenn dies ggf. Einschränkungen mit sich bringt.

Wenn man nun bspw. an ASP.Net denkt, so würde ich mir vorstellen (oder wünschen), dass es ein Template oder etwas ähnliches wie ein CMS gibt, was einem viel Arbeit in Bezug auf die Kommunikation mit dem Server/Datenbank sowie die Präsentation auf unterschiedlichen Clients abnimmt.

Allerdings ist allein ASP.Net ja bekanntlich schon ein großer "Brocken" bei dem man erstmal wissen muss, in welche Richtung man gehen möchte (MVC, WebPages, WebForms...).

Über jegliche Hilfe würde ich mich sehr freuen!

23.06.2017 - 09:32 Uhr

Da auf dem Zielsystem ausschließlich diese Anwendung läuft, habe ich nun mit diesem Registry Key das Verhalten unterbunden:

HKEY_CURRENT_USER/Software/Microsoft/Wisp/Touch/ Set "Bouncing" = 0

22.06.2017 - 16:12 Uhr

Hallo,

ich habe hier eine ältere WinForms Anwendung, die nun mit einem Touchmonitor bedient werden soll.
Scrollt man per Touch an das Ende einer Liste, so bewegt sich das Fenster (als Response dass das Ende der Liste erreicht ist). Das verhalten ist bekannt und kann unter WPF mit ManipulationBoundaryFeedback usw. verhindert werden. Wie kann ich selbiges in einer Winforms Anwendung umsetzen? Leider konnte ich hier im Forum und auch sonst im Internet keinen Lösungsansatz finden.

Gruß, Jochen

23.12.2016 - 11:33 Uhr

Am liebsten würde ich mein Grid so belassen wie es ist. Das ist recht mächtig. An ein Warp Pane hatte ich auch schon gedacht - am schönsten wäre es, wenn man das Grid da einfach rein legen könnte und es würde automatisch umgebrochen. Funtioniert so leider nicht, hab ich bereits getestet.

23.12.2016 - 10:19 Uhr

Zum besseren Verständnis habe ich ein Bild eingefügt. Rechts habe ich den Zustand gemalt, wie er sein sollte.
Ich hoffe das hilft.
Die rechteckige Fläche soll den Container darstellen, in rot sind die Zeilen dargestellt, die eingefügt werden sollen. We mal links sieht, sind das mehr, als der Container aufnehmen würde. Somit soll der Container einfach den Rest des Grids in seiner zweiten hälfte darstellen.

23.12.2016 - 08:30 Uhr

Hallo zusammen,

ich möchte gern ein Grid automatisch umbrechen lassen. Angenommen mein Grid hat zwei Spalten (Header und Wert) und 50 Rows. Gibt es einen Container, der das Grid automatisch nach erreichen der Containerhöhe automatisch horizontal umbricht?

Gruß und frohe Weihnachten euch allen.

09.05.2016 - 11:59 Uhr

Ihr seid super, danke!

09.05.2016 - 09:32 Uhr

Hallo,

ich möchte einem Dockpanel ein Background Image hinzufügen. Das Image soll aus einem XAML Path erzeugt werden, also eine Vektorgrafik.

Als Background sind diverse Brushes möglich. Leider finde ich nicht heraus, welchen Brush in welcher verschachtelten Ebene ich verwenden muss, um irgendwie die Daten des XAML Paths eingeben zu können.

Jemand eine Idee wie man den XAML Path in solch einen Brush integriert bekommt?

<Path x:Name="itemImgPath"
                              HorizontalAlignment="Center"
                              VerticalAlignment="Center"
                              Data="m 23.635,37.411 c 0.76,-0.238 1.565,-0.392 2.314,-0.492 L 25.23,35.987 C 17.946,34.472 12.456,28.006 12.456,20.279 c 0,-8.845 7.198,-16.043 16.045,-16.043 8.847,0 16.042,7.197 16.042,16.043 0,1.92 -0.356,3.755 -0.978,5.463 0.535,0.666 1.072,1.377 1.564,2.095 1.05,-2.306 1.649,-4.859 1.649,-7.558 C 46.779,10.186 38.595,2 28.501,2 c -10.096,0 -18.28,8.186 -18.28,18.279 0,8.133 5.316,15.019 12.66,17.392 0.242,-0.089 0.489,-0.177 0.754,-0.26 z m 26.517,0.3 c -0.179,-0.242 -0.447,-0.403 -0.745,-0.445 -0.302,-0.038 -0.602,0.038 -0.84,0.223 l -0.721,0.557 c -0.526,-1.676 -1.584,-4.861 -2.721,-7.247 -1.576,-3.304 -5.938,-7.7 -5.938,-7.7 0,0 -0.943,-1.223 -2.131,-1.223 -0.366,0 -0.754,0.116 -1.145,0.416 -1.658,1.279 -0.058,3.361 -0.05,3.371 -0.006,-0.008 -0.947,-1.223 -2.131,-1.223 -0.366,0 -0.754,0.115 -1.146,0.417 -1.657,1.277 -0.057,3.359 -0.049,3.37 -0.006,-0.008 -0.978,-1.263 -2.137,-1.263 -0.333,0 -0.682,0.103 -1.028,0.37 -1.551,1.198 -0.16,3.455 -0.16,3.455 l -5.102,-6.612 c 0,0 -1.531,-1.986 -3.123,-1.986 -0.383,0 -0.769,0.114 -1.138,0.399 -1.903,1.47 0.449,4.526 0.449,4.526 L 28.9,38.264 c 0,0 -0.093,-0.003 -0.258,-0.003 -0.718,0 -2.806,0.052 -4.559,0.599 -3.8,1.193 -4.464,2.791 -3.778,4.467 0.153,0.377 0.669,0.518 1.397,0.518 2.112,0 6.021,-1.176 8.163,-1.176 0.148,0 0.287,0.006 0.418,0.018 2.618,0.24 5.503,2.427 6.889,3.607 l -0.404,0.312 c -0.48,0.371 -0.577,1.057 -0.218,1.546 l 5.58,7.607 1.803,-1.322 -4.935,-6.729 10.029,-7.75 4.905,6.683 1.803,-1.324 -5.583,-7.606 z"
                              Fill="Black" />
01.03.2016 - 16:08 Uhr

Hallo Daniel,

ich habe ein wenig mit deinem Projekt gespielt und hätte noch 2 Fragen:

  1. Touch Zoom also Pinch to Zoom: Hast du hierfür schon etwas vorgesehen?

  2. Links innerhalb eines PDFs werden scheinbar nicht unterstützt, oder hast du gegenteilige Erfahrungen gemacht?

Gruß, Jochen

21.08.2015 - 09:36 Uhr

Danke für eure Hilfe! Der letzte Hinweis von ThomasE. hat mein Problem gelöst!

20.08.2015 - 15:54 Uhr

Der XAML-Code sollte in C# "übersetzt" werden. Mein eigener Versuch muss jedoch irgend einen Fehler haben, da er nicht funktioniert.
Ich möchte im Code Behind ein Binding einem Path hinzufügen, sodass dieser Path für die Eigenschaft "Fill" die Foregroundcolor des TabItems nutzt.

20.08.2015 - 08:49 Uhr

Hallo,

ich möchte den folgenden Ausdruck in C# Code Behind konvertieren, komme jedoch mit der Syntax nicht zurecht. Würde mir bite jemand helfen?


<Path Data="M 58 [...] z" Fill="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabItem}}" />

Dieser XAML Code funktioniert so wie ich mir das vorstelle: Ist ein TabItem angewählt, so beommt der Path des Bildes eine andere Hintergrundfarbe.


Path aPath = new Path();
aPath.Data = Geometry.Parse(sImagePath);
Binding fillBinding = new Binding("Foreground");
fillBinding.ElementName = sTabPageName; // sTabPageName ist der Name eines TabItem
BindingOperations.SetBinding(aPath, "Fill", fillBinding); // <- funktioniert so nicht

20.02.2015 - 12:59 Uhr

Hallo,
ich meine schon die ersten beiden Spalten. Dazu habe ich einen Screenshot angehängt, der das verdeutlicht.
Ich habe mein Problem erstmal so gelöst, dass die ersten beiden Spalten eine andere Hintergrundfarbe erhalten als der Rest der Tabelle.
Das ist aber nur suboptimal. Der Vorteil von RowHeadern ist nämlich, dass sie beim Scrollen des Content nach rechts immer auf der linken Seite fest stehen bleiben und somit die Zuordnung der Zeilenbeschriftung zum jeweiligen Wert für den Anwender immer ersichtlich bleibt.

19.02.2015 - 14:19 Uhr

Hallo,

ich verwende ein WPF DataGrid zum Anzeigen meiner Daten.
Die Quelle ist eine DataTabe.
Die ersten beiden Spalten verstehen sich als "RowHeader".
Nun meine Frage:
Ist es möglich, dem DataGrid zu sagen, das die erste oder die ersten beiden Spalten als RowHeader genutzt werden sollen?
Bin für jede Idee dankbar!

02.02.2015 - 16:05 Uhr

Hallo liebes Forum,

ich hoffe jemand kann mir bei folgendem Problem helfen. Ich habe bereits im Forum gesucht und auch die FAQ ([FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)) konnte mir nicht weiter helfen.

Ich habe einen WPF GUI. Dieser greift auf eine DLL zu, die aus einer Beckhoff PLC Liest und schreibt.
Wenn mein GUI schreibt, wird der entsprechende Wert auch richtig in die PLC geschrieben. Als Reaktion auf das Schreiben, verändert die PLC einen anderen Wert. Die DLL überprüft dies und löst ein Event aus, das der GUI aboniert hat. So weit so gut.
Wird nun dieses Event von der DLL gefeuert, so soll im GUI ein Control verändert werden. Im Detail: Ich erstelle ein UserControl und füge es der MainPage meiner WPF GUI an.
Und genau hier habe ich ein Problem. Eine Exception wird geworfen:

Fehlermeldung:
"Beim aufrufenden Thread muss es sich um einen STA-Thread handeln, da dies für viele Komponenten der Benutzeroberfläche erforderlich ist."

Das kann ich nicht wirklich nachvollziehen, da ich ja extra die Trennung mittels der Events vorgenommen habe? Jemand eine Idee woran das liegen könnte?

Noch eine Info: Verwendet man diese DLL mit einem Windows Forms GUI, so kann man den Fehler mittels "CheckForIllegalCrossThreadCalls = false;" unterdrücken und der GUI verhält sich wie gewünscht. Entfernt man " CheckForIllegalCrossThreadCalls = false;" so crascht auch die Forms Anwendung mit der Meldung:"Ungültiger threadübergreifender Vorgang."

Nachtrag: Wenn die Lösung ein Dispatcher sein sollte, dann verstehe ich allerdings nicht, wie ich einen Dispatcher gemeinsam mit einem Event verwenden kann? Alle Beispiele verwenden den Dispatcher immer nur mit einer Methode die einmalig ausgeführt wird - ich müsste ja das Abonieren des Events per Dispatcher ausführen, oder?

23.05.2013 - 08:08 Uhr

Habe das Problem nun folgendermaßen lösen können:

1. Windows DEP deaktivieren: bcdedit /set {current} nx AlwaysOff
2. Restart Computer
3. Handle LoaderLock: Error with LoaderLock Managed Debugging Assistant (MDA) when Calling a DLL

Seitdem funktioniert das C# Projekt unter Windows 7 genauso wie unter Windows XP.

16.05.2013 - 10:03 Uhr

Beide Systeme sind 32bit Prof., sowohl XP als auch Windows 7. Der Unterschied kann ja nur mit dem Windows 7 zu tun haben, die Frage ist nur wie bekommt man den Fehler weg?

16.05.2013 - 09:45 Uhr

@weismat: Ne, leider nicht. Die Dll gibt es nur für 32bit OS.
Vielleicht noch wichtig als Zusatzinfo: Es handelt sich um eine mit LabVIEW geschriebene DLL eines Zulieferanten. Aber wie gesagt, im C - Beispiel Code läuft die Anwendung. In C wird die Dll so eingebunden:


typedef long (*Function)(unsigned long, unsigned long, char [], double, double, 
	double, double, double, double, short int *, 
	short int *, short int *, short int *, short int *, 
	short int *, unsigned short int [], long *);

16.05.2013 - 08:43 Uhr

Ok, danke für den Hinweis. Leider bleibt das Verhalten auch als Admin gleich.

16.05.2013 - 08:08 Uhr

@Spook: ich hab die DLL in zwei unterschiedlichen Versionen, zuerst habe ich es mit dem __stdcall versucht, jetzt mit dem __cdecl. Richtig ist:


long __cdecl ApintUsb(unsigned long ProductNumber, 
	unsigned long ChannelNumber, char Function[], double In1, double In2, 
	double In3, double In4, double In5, double In6, short int *Out1, 
	short int *Out2, short int *Out3, short int *Out4, short int *Out5, 
	short int *Out6, unsigned short int Array[], long *len);

Noch zur Ergänzung der Windows 7 Fehlermeldung: Bevor der Fehler mit dem geschützten Speicher auftritt kommt die Meldung:

Fehlermeldung:
Der Assistent für verwaltetes Debugging "LoaderLock" hat ein Problem in "C:\Program Files\dll c call herkules\Jochen\bin\Debug\USPC_Test.exe" festgestellt.
Weitere Informationen finden Sie unter: Die DLL "C:\Program Files\National Instruments\Shared\LabVIEW Run-Time\7.0\DNCompInfo.dll" unternimmt einen Versuch, innerhalb der Sperre für den OS-Loader eine verwaltete Ausführung durchzuführen.

@inflames2k: Kann man beim Debugging in VS einstellen, dass das Programm als Admin ausgeführt werden soll?

15.05.2013 - 16:15 Uhr

So, jetzt wird es ganz seltsam:
MIt dieser Deklaration bekomme ich das ganze unter Windows XP und Visual Studio 2008 zum laufen, aber nicht unter Windows 7. Dort bekomme ich immer den Fehler: > Fehlermeldung:

Es wurde versucht im geschützten Speicher zu lesen...

Wie gesagt, unter XP funktioniert es nun, nicht aber unter Win7???


 [DllImport("C:\\Program Files\\dll c call herkules\\ap_int_usb.dll", CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]
    public extern static long ApintUsb(int ProductNumer,
    int ChannelNumber, StringBuilder Function, double In1, double In2,
    double In3, double In4, double In5, double In6, ref Int16 Out1, ref Int16 Out2, ref Int16 Out3, ref Int16 Out4, ref Int16 Out5,
    ref Int16 Out6, ref UInt16[] myArray, ref int Length);

13.05.2013 - 15:05 Uhr

Hallo C#EDDY,

danke für den Tip, klappt leider dennoch nicht:


    [DllImport("ap_int_usb.dll", CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]
    public extern static long ApintUsb(UInt32 ProductNumer,
      UInt32 ChannelNumber, sbyte[] Function, double In1, double In2,
      double In3, double In4, double In5, double In6, ref Int16 Out1, ref Int16 Out2, ref Int16 Out3, ref Int16 Out4, ref Int16 Out5,
      ref Int16 Out6, UInt16[] myArray, ref Int32 Length);

Anwendung bleibt "hängen".

13.05.2013 - 14:11 Uhr

Demzufolge müsste der DllImport so aussehen:


[DllImport("ap_int_usb.dll")]
    public extern static long ApintUsb(UInt32 ProductNumer, 
      UInt32 ChannelNumber, sbyte[] Function, double In1, double In2,
      double In3, double In4, double In5, double In6, ref Int16 Out1, ref Int16 Out2, ref Int16 Out3, ref Int16 Out4, ref Int16 Out5, 
      ref Int16 Out6, UInt16[] myArray, ref Int32 Length);

Dennoch bleibt die Anwendung beim Aufruf der Methode "ApintUsb" hängen?!? Was kann es sonst noch sein? ggf. stimmt was mit dem Pointern bzw. dem "ref" nicht?!?

13.05.2013 - 12:07 Uhr

Hallo!

ich habe hier eine C-DLL auf die ich zugreifen möchte und komme einfach nicht weiter. Leider konnte ich über die Forensuche nichts passendes finden, vielleicht kann mir jemand von euch freundlicherweise weiter helfen?!

Die C-Methode ist in der Header Datei folgendermaßen definiert:


long __stdcall ApintUsb(unsigned long ProductNumber, 
	unsigned long ChannelNumber, char Function[], double In1, double In2, 
	double In3, double In4, double In5, double In6, short int *Out1, 
	short int *Out2, short int *Out3, short int *Out4, short int *Out5, 
	short int *Out6, unsigned short int Array[], long *len);

Ich importiere folgendermaßen:


  [DllImport("ap_int_usb.dll")]
    public extern static long ApintUsb(ulong ProductNumer, ulong ChannelNumber, string Function, double In1, double In2, double In3, double In4,
      double In5, double In6, IntPtr Out1, IntPtr Out2, IntPtr Out3, IntPtr Out4, IntPtr Out5, IntPtr Out6, IntPtr Array, IntPtr Length);

Wenn ich nun versuche, die Methode "ApintUsb" aufzurufen, so bleibt mein Programm beim Methodenaufruf hängen und ich bekomme keine Antwort mehr. Ich gehe mal davon aus, dass ich bei DllImport einen Fehler gemacht habe. Gibt es andere Lösungsansätze für die ganzen C-Pointer?

Ich habe auch ein Beispielprojekt in C. Hier wird die Dll folgendermaßen aufgerufen:


int main(int argc, char **argv)
{
        Function Myfunction;
	HINSTANCE ID = LoadLibrary(TEXT("D:\\_TEMP\\ap_int_usb.dll"));

	
	/* Get DLL function "ApintUsb" */
	Myfunction = (Function)GetProcAddress(ID,"ApintUsb");
	
	
	/* Init USB Link */
	Return_Code = Myfunction(1,0,"Init usb",0,0,0,0,0,0,0,0,0,0,0,0,NULL,0);
}
[CODE]

Hat jemand einen Lösungsansatz für mich? Dank schonmal für Eure Hilfe!
04.08.2011 - 15:02 Uhr

Hi,
hat sich erledigt, hab meinen Fehler gefunde. Habe versehentlich doch nicht immer die gleiche Referenz auf das Objekt gehabt; es gab mehr als einmal bspw. das Objekt U1 auf das die Referenz UOP1 pointete. Die Objekte hatten zwar den gleichen Namen, aber es waren eben 2 unterschiedliche und nicht ein und das selbe. Daher kommt natürlich das seltsame Verhalten. Sorry das ich euch belästigt habe. Mein Fehler!

04.08.2011 - 14:24 Uhr

Hallo Floste,
vielen Dank für deine schnelle Antwort.
Die List<UserObject-Pointer> ist eine einfache "List" vom Datentyp "UserObject". Ist im Grunde ein ganz normales Objekt. Die Pointer (falsch, Referenzen) auf diese Objekte habe ich in diese Liste aufgenommen.

@ProgrammierTroll: wie meinst du das? Ich nehme die Referenz auf das Objekt und schreibe den Wert mittels seines SETTERS.

04.08.2011 - 13:36 Uhr

Hallo,

ich habe hier ein sehr seltsames Verhalten. Ich verwende eine Hashtable deren Key ein String ist und der zugehörige Value eine List<UserObject-Pointer>.
Ein und der selbe UserObject's-Pointer kann mehrfach in verschiedenen Listen vorkommen.
(Zur erklärung)
HashTable:
Key1 - List<UOP1, UOP2, UOP3>
Key2 - List<UOP1, UOP4, UOP5>
Hier wird also der Pointer(UOP) auf das UserObject (UO) UOP1 in zwei Listen verwendet.
Wird nun ein Wert von UO mittels dem UOP1 der Liste die sich hinter Key2 verbirgt verändert, so gehe ich davon aus, dass wenn ich mittels UOP1 aus Key1 auf diesen Wert zugreife, ich genau diesen veränderten Wert erhalte. Jedoch ist dem nicht so?!? Warum? Ist dieses Verhalten beabsichtigt oder hab ich an einer anderen Stelle einen Fehler gemacht und hier in dem Beispiel läuft alles richtig?

Gruß, Jochen

06.04.2011 - 08:01 Uhr

Hallo herbivore,

vielen Dank für den Tip mit "DrawString". So funktionierts!

Gruß, Jochen

04.04.2011 - 15:46 Uhr

Hallo,

ich zeichne mehrere Grafikelemente in einem Path. Jetzt möchte ich ebenfalls in diesem Path einen String zeichnen. Das funktioniert auch. Aber dieser String ist nicht "ausgefüllt", es werden nur die Ränder der Buchstaben gezeichnet, der Zwischenraum bleibt leer. Das Tutorial hab ich gelesen, hier wird allerdings in einem späteren Schritt der Pfad gefüllt (mittels g.Fillpath).
Ist es nicht möglich, einen zweiten Pfad nur für den Text zu erzeugen (geht, hab ich getestet), hier den String zu zeichnen, diesen zu füllen und mit Path.combine mit meinem "MainPath" zu verbinden?

Vielen Dank schonmal für eure Antworten!

Gruß, Jochen

14.03.2011 - 11:28 Uhr

Wenn ich jedoch das mache, so ändert sich die aktuelle Sortierung wieder auf die, die die DataTable in der Ausgangssituation hatte.
Das Problem für den Anwender ist dann am größten, wenn er die Tabelle ABSTEIGEND sortiert und in der Spalte, nach der sortiert wird, ein Wert geändert wird (bspw "Z" zu "C"). Dann verliert man komplett die Orientierung.

14.03.2011 - 08:44 Uhr

Hallo,
ich habe folgendes Problem:
In einem Datagridview stelle ich eine Datatable dar. Der Anwender kann die Tabelle beliebig sortieren. Die Sortierung geschieht mittels datatable.defaultview...
Mittels "Search & Replace" ist es dem Anwender möglich, die Werte in der Tabelle zu verändern. Sollte die Tabelle jedoch zuvor sortiert worden sein und ändert sich der Wert in der sortierten Spalte, so sortiert sich das Grid automatisch neu, obwohl ich zuvor die Sortierung wieder auf None gestellt habe. Dies ist natürlich sehr blöd, da der Anwender so verwirrt wird.
Kann man dieses Verhalten des Grids verhindern?

Vielen Dank schonmal!

18.01.2011 - 11:04 Uhr

Hallo,
vielen Dank für eure Antworten. Leider genügt es bei mir nicht, nur die eine Form vor die andere zu legen. Die Form soll wirklich nicht mehr da sein (auch nicht in der Taskleiste sichtbar usw.)
Ich hab jetzt folgendes gemacht. Nachdem ich die jeweilige Form in den Vordergrund bringe kommt erstmal Application.DoEvents() und danach wird die jeweils andere auf Visible=false gesetzt. In etwa 9 von 10 Formwechseln klappt das auch. Ärgerlich ist das jedoch trotzdem.

17.01.2011 - 16:05 Uhr

Hab ich zur Sicherheit auch noch mit dabei geschrieben: .Visible() .BringToFront() & .Show(). Bringt leider alles nix.

17.01.2011 - 15:49 Uhr

Hallo,
ich habe ein Problem mit dem wechseln zwischen 2 Forms. Wenn ich von Form1 Form2 aufrufe, so ist kurzzeitig der Desktop zu sehen.
Was ich mache: Referenzen auf die Objekte beider Forms sind in einer statischen Klasse hinterlegt. Wenn nun Form1 Form2 aufruft, setze ich zuerts Form2.Visible = True und danach Form1.visible = False. Beim umgekehrten Aufruf das gleiche. Sollte eigentlich funktionieren. Wenn man zwei leere Forms in einem leeren Projekt nimmt so klappt das ganze auch ohne das man den Desktop sieht. Jedoch hab ich schon ein paar Controlls auf den Forms. Hat jemand eine Lösung bzw. ein Ähnliches Verhalten schon mal beobachtet.
Zur Info: Beide Forms werden als Vollbild dargestellt, auch die Taskleiste wird von der Form überdeckt.

Gruß, Jochen

29.09.2010 - 13:42 Uhr

Vielen Dank herbivore!

Hätte nicht gedacht, dass das alles ist. Dachte ich müßte zwingend eine entsprechende Methode in ein Interface packen.

Hab jetzt folgendes gemacht (vielleicht interessiert's ja jemanden)

DLL:

    
public event EventHandler<EventArgs> evtVarChanged;

public void OnVarChanged()
{
  EventHandler<EventArgs> myEvent = evtVarChanged;
  if (myEvent != null)
  {
    myEvent([MeinObjekt], null);
   }
}


und in meiner EXE:



public void init()
{
  [DLL-Ref].evtVarChanged += new EventHandler<EventArgs>(Client_evtVarChanged);

}

private void Client_evtVarChanged(object o, EventArgs e)
{
  // CODE
}

Das funktioniert bei mir, ich bekomme das entsprechende Event in der EXE.

Vielen Dank nochmals für den Link!

29.09.2010 - 11:07 Uhr

Hallo Mazzo123,

würde gerne ähnliches machen: Die DLL soll über ein Event die EXE benachrichtigen. Hast du vielleicht hierzu einen Codeschnippsel für mich. Ich such mich hier schon seit Stunden dumm und dämlich und find dazu einfach nirgends ein Beispiel.

Vielen Dank, Jochen

08.09.2010 - 14:25 Uhr

Problem hat sich erledigt, Code von oben funktioniert. Lag an einem fehlenden Aufruf der C-DLL, dadurch wurde der Speicher erst gar nicht gefüllt.

Aber ich hab noch eine Frage:
Wenn jetzt das byte[] Daten für ein zweidimmensionales Array enthält, z.B double[][], ist hier der einzige Weg, mittels Buffer.BlockCopy() alles in ein eindimmensionales double[] zu kopieren und danach hieraus ein zweidim. Array zu machen? Oder gibt es einen anderen Weg? weil so muss ich ja immer wissen, wie groß die jeweilige Dimmension ist?

08.09.2010 - 12:08 Uhr

Hallo Arithmetika,

meinst du vielleicht so:



GCHandle myHandle = GCHandle.Alloc(Data, GCHandleType.Pinned);
Marshal.Copy(iSource, (byte[])myHandle.Target,0,pSize);
myHandle.Free();


Das führt bei mir aber zum gleichen Ergebnis, "Data" ist noch immer leer.

08.09.2010 - 11:05 Uhr

Hallo,

ich muss von einer Speicheradresse ein byte[] lesen. Dieses Array kann ein- oder mehrdimensional sein. Im weiteren Verlauf wird es dann zu bspw. double, double[] oder double[][] konvertiert - doch mein Problem beginnt früher.

Für eindim. byte[] funktioniert alles bestens und auf mehreren Wegen:



// pSize bekomme ich von einer DLL-Funktion geliefert.

byte[] Data = new byte[pSize];
IntPtr intPtr;
unsafe
{
fixed (byte* pByte = Data)
  intPtr = new IntPtr((void*)pByte);
}

KPRT_Access.KPMemClone(intPtr, VbReadAddress(VarIndex), pSize);
// und jetzt habe ich in "Data" das entsprechende byte[], das ich zu bspw. double konvertieren kann

// ALTERNATIVE:
IntPtr iSource = new IntPtr(VbReadAddress(VarIndex)); // VbReadAddress(VarIndex) liefert mir den Pointer auf diese Variable als int und wird hier zu IntPtr konvertiert
Marshal.Copy(iSource, Data,0,pSize);
// dies liefert mir ebenfalls in "Data" das byte[].


Problem: Wie bereits erwähnt kann das byte[], das im Speicher liegt, auch mehrdimensional sein. Wenn ich dieses dann auf dem selben Weg versuche einzulesen, erhalte ich ein leeres byte[].

Verwendet wird eine in C geschriebene DLL, die unter VB6 funktioniert. Also sollte diese nicht das Problem darstellen.

Wie greife ich auf ein mehrdimensionales Array im Speicher zu???

Gruß, Jochen

08.09.2010 - 10:40 Uhr

Hallo Cuin,

wenn du wirklich kein RegEx benutzen möchtest, könntest du auch string.split(" ") verwenden. Da bekommst du ein string[] mit je einem Wort an einer Array-Adresse zurück. Dann könntest du alle Arrayelemente auf dein Suchwort hin überprüfen.

Vielleicht ein weing umständlich aber sollte funktionieren.

23.04.2010 - 12:42 Uhr

Hallo,
hat noch immer keiner eine Idee?
Zwischenzeitlich habe ich das Problem mit "NamedDestinations" bzw. einem Plugin, das Bookmarks zu Named Destinations konvertiert gelöst. Zu Named Destinations kann man ja problemlos navigieren mittels "setDestination".
Jetzt ist diese Lösung aus verschiedenen Gründen leider nicht mehr praktikabel, daher müßte ich wiederum meine obenstehende Frage aufgreifen. Wie kann ich zu Bookmarks in einem PDF navigieren, wenn keine Named Destinations existieren. Muss doch irgendwie möglich sein, oder nicht?

Alternativ könnte man die Bookmarks auslesen und dann über die Seitenzahl navigieren. Hat dazu jemand eine Idee/Lösung?

Vielen Dank schonmal!

21.01.2010 - 09:27 Uhr

Hallo,
wurde das Problem jemals gelöst? Hab nämlich ebenfalls ein Problem mit dem SELECT, genau das angesprochene. Mein "handle" (wie kait es bezeichnet) enthält leider ein ' (Hochkomma) und somit denkt VS der Ausdruck wäre hier zu ende. Auch mit String.Format kommt die gleiche Exception (Fehlender Operand nach ').

Hat jemand eine Lösung???

16.06.2009 - 07:52 Uhr

Macht Sinn!
Vielen Dank!