Hallo dN!3L!
Diese Option hatte ich ignoriert, da die Quelle ja auf jeden Fall erreichbar ist. War (ist) ein anderes Projekt von mir selbst. Nachdem ich aber diese Option ausgeschaltet hatte, zeigte VS an, dass die Datei vorhanden sei, aber eine (die) Prüfsumme nicht stimmt. Ergo habe ich die DLL erneut in die Verweise eingefügt, jetzt geht es wieder!
Danke für den Hinweis!
Fred.
Hallo,
durch irgendeine Einstellung im VS wird mir beim debuggen einer eingebundenen Assembly neuerdings immer das Disassembly Fenster angezeigt.
Weis jemand woran das liegen könnte?
Hallo MarsStein!
Dictonary von Dictonary's.
Ja Du hast recht, das habe ich überlesen. Diese Variante ist zwar nicht gerade speicherfreundlich und ich benötige für jeden Datentyp ein seperates Dictonary, aber es würde funktionieren!
Ich habe mir zwischenzeitlich überlegt, dass ich den Namen einer Liste fest definieren werde und in diese alle Einträge kopiere. Jetzt muss ich (beim einlesen/hinzukopieren) nur den KEY-Namen so gestalten, dass der Bereich vorangestellt wird. Aus der Strukturtabelle lese ich dann nur die KEY-Bezeichnung aus (welche ich bei der Liste ja als String angeben kann) und kann so auf den Inhalt zugreifen.
Diese herangehensweise ist für den Zugriff auf die Tabellen/Spalten jedoch nicht möglich.
Danke für deinen erneuten Hinweis!!
Fred.
Hallo gfoidl!
Ich habe mir meinen geposteten Code nochmal angesehen.
Da ich mit sehr unterschiedlichen Programmiersprachen (Perl, dotNet, VisualdBase, SQL, sed und awk, JAVA, Flash und diverse Script-Sprachen [Windows sowie Unix]) programmiere, bemühe ich mich zwar immer (wieder) für die jeweiligen Sprachen die passenden Typ-Namen zu benutzen aber manchmal ... ich hoffe, ihr seit verständnisvoll...
Generell ersteinmal, setze ich vor jedem Namen immer den Typ (siehe oben). Durch die unterschiedlichen Sprachen habe ich mir leider angewöhnt, gleiche (unabhängig von der Programmiersprache), deutsche Äquivalente zu benutzen.
Im konkreten Beispiel steht aar_ zB. für Assocc-Array. Damit weis ich 🙁 das ich einen Array-Typ habe, dessen Elemente über Strings angesprochen werden.
Aber ich habe deine (eure) Botschaft(en) schon verstanden und versuche auf eine C# kompatible Namensgebung bei weiteren Postings mehr Augenmerk zu legen!
Hallo,
erst einmal vielen Dank! für eure zahlreichen Hinweise!
JAck30lena du hast mit deiner Zusammenfassung:
@all: er möchte die varaiblenbezeichner verwenden um an die instanzen zu kommen.
es am ehesten getroffen.
Aus meiner Sicht wäre vieleicht:
Er möchte den Varaiblen-Inhalt verwenden um an die Instanz(en) zu kommen.
das Treffenste.
Da ich ja offensichtlich das Pferd von hinten aufzäume, versuche ich mal meine Aufgabe ganz allg. darzustellen und bin gespannt, wie ihr in C# an die Lösung gehen würdet.
Am anschaulichsten ist vieleicht das Beispiel Tabellen, Spalten.
Ich benutze in einer Anwendung unterschiedlichen Window(s) mit Tabellen und Spalten.
WindowA -> Tabelle1: Spalte1, Spalte2
WindowB -> Tabelle1: Spalte2, Spalte3
WindowC -> Tabelle2: Spalte3, Spalte4
In einer Tabelle speichere ich die "Struktur" der Window(s) mit ihren Bezeichnungen.
Struktur-Tabelle:
Window_Name | TABELLEN_NAME | SPALTEN_NAME | BEZEICHNUNG
WindowA | Tabelle1 | Spalte1 | "Auto-Typ"
WindowA | Tabelle1 | Spalte2 | "Auto-Preis"
WindowB | Tabelle2 | Spalte2 | "Wein-Anbaugebiet"
WindowB | Tabelle2 | Spalte3 | "Wein-Güte"
...
Im Start-Fenster der Anwendung exestiert eine Auswahl zur Verzweigung in die einzelnen Window(s) per Baumdiagramm.
Wenn ein Eintrag ausgewählt wird, soll die Struktur des jeweiligen Window mit seinen Standard-Werten angezeigt werden. Die Standardwerte werden jeweils in der 1. Zeile der in der Struktur angegebenen Tabelle/Spalte abgelegt.
Zb: WindowA => Autoverkauf
Autoverkauf
| AutoTyp
| | - BMW 318d
| Auto-Preis
| | - 32.640 Euro
Dazu muss ich also auf den Inhalt, der **in der Struktur-Tabelle angegebenen **Tabelle/Spalte, zugreifen.
In diesem Beispiel sieht das alles noch recht statisch aus und ließe sich vieleicht auch ohne Struktur-Tabelle lösen. In der wirklichen Anwendung entsprechen den einzelnen Windows aber Wordvorlagen und die einzelne BEZEICHNUNGEN sind Bookmarks. Nicht nur das es 40-50 Vorlagen gibt, die gibt es auch noch in unterschiedlichen Versionen mit Gültigkeits-Datum. Das läßt sich nur verwalten, wenn man pro Vorlage die Struktur in einer Datenbank speichert.
Um das Gesamtbild abzurunden...
Nach der Auswahl des Windows (Baumdiagramm) wird dann in das jeweilige Window verzweigt, und der Benutzer hat die Möglichkeit, die in der Struktur unter BEZEICHNUNG angegebenen Punkte detailiert zu befüllen. Diese Werte werden dann in der in der Strukturtabelle angegebenen SQL-Tabelle/Spalte mit der jeweiligen Benutzerkennung, gespeichert.
Ich hoffe, ich habe euch jetzt nich zu viel zugemutet (sich reinzudenken). Für ein generelles herangehen, war die Gesamtdarstellung, denke ich aber hilfreich. Auch um mein Problem verständlicher zu machen.
Wie greife ich, auf die in einer Variablen gespeicherten Bezeichnung einer Tabelle+Spalte, auf den Wert dieser Tabelle/Spalte zu???
Analog:
Wie greife ich, auf die in einer Variablen gespeicherten Bezeichnung einer Liste/Key, auf den Inhalt der Liste/Key zu???
Fred.
Hallo gfoidl!
Danke für deine Antwort.
Der Hinweis auf generische Listklassen ist erst einmal oK.
Mein Problem Macrosubstitution gehört aber sicher nicht zu den Grundlagen und
hat auch nichts mit Klassen zu tun.
Zur Verdeutlichung noch einmal: Ich möchte den Inhalt einer Stringvariable als Bezeichner für ein instanzierte Klasse (im Beispiel Hashtable -> aar_SAB_Werte) verwenden.
Hallo,
diesmal eine etwas andere herangehensweise...
Ich speichere in einer Datenbank die Namen und die Key's von Listen, welche im Programm definiert sind.
Wie kann ich auf die Liste (und den Inhalt der Liste) zugreifen?
Beispiel:
Im Programm habe ich die Hastabelle
Hashtable aar_SAB_Werte = new Hashtable(); // SAB-Werte - Zusammenstellung
ich definiere einige Werte...
aar_SAB_Werte.Add("ABTEILUNG", SAB_Zeilen[0].ABTEILUNG); // SAB-Abteilung
aar_SAB_Werte.Add("FUNKTION", SAB_Zeilen[0].FUNKTION); // SAB-Funktion
aar_SAB_Werte.Add("ZIMMER", SAB_Zeilen[0].Zimmer); // SAB-Zimmer
und speicher in einer Datenbank den Listen_Name: "aar_SAB_Werte" und den Key_Name: zB. "ZIMMER".
In einem anderen Window lese ich die Listen_Name und den Key_Name wieder aus:
// Interne Listen
string zDEFAULT_LISTE_Strg_Name = (upZeile["DEFAULT_LISTE_Strg_Name"] is System.DBNull) ? string.Empty : (string)upZeile["DEFAULT_LISTE_Strg_Name"];
string zDEFAULT_LISTE_Strg_KEY = (upZeile["DEFAULT_LISTE_Strg_KEY"] is System.DBNull) ? string.Empty : (string)upZeile["DEFAULT_LISTE_Strg_KEY"];
...
// Daten die aus internen Listen bereitgestellt werden
if (zDEFAULT_LISTE_Strg_Name != string.Empty && zDEFAULT_LISTE_Strg_KEY != string.Empty) // List-Name und Key angegeben?
{
...
Wie kann ich jetzt auf den Inhalt zugreifen?
variable = (Macrosubstitution)Listen_Name[Key_Name];
soll entsprechen:
variable = aar_SAB_Werte["ZIMMER"]
Hallo JAck30lena und herbivore !
Da ich die Listen (vorerst) nur in einem weiteren Window benötige, habe ich es jetzt mit Parameterübergabe zwischen den Windows gelöst (Danke herbivore für den grundsätzlichen Ansatz!!!).
objektmodell-klassen ... das muss ich mir trotzdem auch noch ansehen!
Schaff ich aber Heute nicht mehr... 🙁
Danke JAck30lena!
Fred
Hallo,
wo könnte ich Variablen (im speziellen Listen) definieren, die ich Global im Namenspace, also über mehere Formulare bzw. (WPF) Window, hinweg benötige?
Skalare Variablen könnte ich noch unter Application.Current.Properties
Application.Current.Properties["aktSAB"] = SAB_Zeilen[0].PNR; // Akt. Sachbearbeiter-Nr. zentral "merken"
ablegen aber Listen zB.??
Hallo,
wie kann ich denn die Seitennummer der letzten Seite des activeDocument ermitteln?
Hallo,
Befürchtung ist natürlich eingetreten. (M)Ein Value-Converter wandelt sauber DBNull-Werte in string.Empty Werte um, aber die Werte können nicht von einem typisierten Dataset kommen, da dieser schon eine Exception wirft, bevor der Converter die Daten erhält.
Ich habe jetzt einfach keine Zeit mehr mich noch weiter damit zu beschäftigen und prüfe einfach alle Spalten per SQL auf Null-Werte aber dies ist doch ein generelles Problem
**Typisiertes Dataset -> DBNull-Wert -> WPF-Binding **
, hat da nicht doch jemand einen Lösungsansatz???
Fred.
Hallo prakti08!
Danke für deine Antwort.
Die möglichen Werte für die Spalte zu begrenzen, verlagert das Problem doch nur an eine andere Stelle. Jetzt läßt die Spalte keine NULL-Werte mehr zu und löst beim Laden der Tabelle eine Exception aus. NULL-Werte stehen nun mal in der DB.
Ich werde es mal mit einem Value-Converter probieren. Ich weis aber (noch) nicht, ob das Binding trotzdem vorher schon eine Exception wirft, bevor der Value-Converter überhaupt seine Werte erhält?
Hallo,
GetChildRow() gibt ein Row-Array! zurück. Ich habe unkorrekt Updatet
nDS = adap_SAB.Update(SAB_Zeilen[0]);
So funktioniert es.
Fred.
Hallo,
gleich noch ein Problem...
Ich habe eine Textbox über Binding mit einer Spalte einer DataTable eines typisierten Datasets verbunden.
Wenn ich jetzt auf eine Zeile, die dBNULL-Werte enthält "gehe", wird mir eine Exception: System.Data.StrongTypingException geworfen.
Ist erstmal logisch, wenn, ein get von einer Spalte so definiert ist:
return ((string)(this[this.tableTab_SAB.ABTEILUNGColumn]));
In der DataSet.Designer.cs sollte man nun auch nicht gerade "rumwurschteln" und per SQL alles umzuwandeln (isNULL()) ist auch nicht gerade elegant.
Welche (einfache) Lösung gibt es denn noch?
Hallo fuchs005!
Der Focus der Textbox(en) wird spätestens beim klicken auf die Speichern-Schaltfläche verlassen.
Das kann es so nicht sein.
Trotzdem Danke für deine Antwort.
Fred
Hallo,
was ganz einfaches, aber es funktioniert nicht ...
Ich möchte einfach nur Werte, die ich über eine Textbox eingegeben habe, in einer DB speichern.
Ich habe ein typisiertes Data-Set [DS_SAB] mit zwei Tabellen. Tabelle A ist eine View (mit einigen Relationen) in der Stammdaten zu Benutzern angezeigt werden [View_SAB]. Tabelle B ist eine "Ergänzungs"-Tabelle, in der zu den Benutzern Stammdaten-Ergänzungen, welche durch die Benutzer eingetragen werden sollen, gespeichert werden [Tab_SAB].
Tabelle A und Tabelle B verbinde ich im DataSet über die gemeinsame ID mit einer Relation.
Anschließend setze ich den PrimaryKey der View-Tabelle und wechsle zum akt. Benutzer-Eintrag (DS_SAB.View_SAB.Rows.Find()).
Über GetChildRow() hole ich mir die (über Relation eingebundennen) Ergänzungsdaten und stelle alle Daten den jeweiligen Label bzw. TextBoxen zur Verfügung.
Über Binding zeige ich die Werte an (Textboxen haben ausschließlich Bindung(en) an die Ergänzungstabelle [Tab_SAB]).
<Label Name="t_SAB" Content="{Binding NAME}"/>
<TextBox Name="e_SBK" Text="{Binding SBK}"/>
Es werden alle Daten: View und Ergänzung, korrekt angezeigt!
Wenn jetzt in einer TextBox ein Wert geändert wird, möchte ich das speichern.
Dazu habe ich eine Schaltfläche psave.
Wenn ich aber auf geänderte Zeilen prüfe, können keine gefunden werden.
DataTable geaenderteZeilen = tab_SAB.GetChanges();
MessageBox.Show(geaenderteZeilen.Rows.Count.ToString());
nDS = adap_SAB.Update(SAB_Zeile);
if (nDS > 0) {
MessageBox.Show("Es wurden " + nDS.ToString().Trim() + " DS geändert!");
}
else
{
MessageBox.Show("Es wurden kein(e) Datensatz(e) geändert!!!");
}
Muss ich bei Binding noch eine Option angeben? oder wie kann ich die DataTable mit den Werten der TextBox(en) aktualisieren?
Hallo michlG!
Ja, das hat mir sehr geholfen und ist genau das, was ich gesucht hatte!
Vielen Dank!!
Fred.
Hallo,
durch ein Binding in einer Listbox ändere ich den akt. Datensatzzeiger in einer Datatable (IsSynchronizedWithCurrentItem="True" ).
ListBox ItemsSource="{Binding}" DisplayMemberPath="Kontierung" IsSynchronizedWithCurrentItem="True" />
Wenn ich ein anderes WPF-Objekt an den gleichen DataContext binde, wird mir bei einer Änderung der Listbox auch der entsprechende Inhalt angezeigt.
<TextBox Text="{Binding Straße}"></TextBox>
Wie greife ich aber jetzt "programmtechnisch" auf die aktuelle Zeile zu?
// Initalisierung
Daten.DataContext = DS_VV.wohnung; // Daten für das gesamte Windows zur Verfügung stellen
// "Auf Knopfdruck"
private void pspeichern_Click()
DataSet_VV.wohnungDataTable tab_Wohnung = DS_VV.wohnung; // Tabelle
MessageBox.Show((string)tab_Wohnung.Columns["Straße"][aktuelleZeile?]);
Hallo frank#!
Danke! ich hatte immer nach einer Windows-Botschaft in der irgend etwas mit MAXIMIZE auftaucht gesucht (auch in der MSDN).
Fred.
Hallo,
mir gehen so langsam die Möglichkeiten aus... und in der Vermutung, das viele auch in C oder mit der API gearbeitet haben...
Welche Windows-Botschaft wird bei Klicken auf die Maximieren-Schaltfläche (bzw. wenn das Fenster maximiert wird) eines WPF-Fensters ausgelöst????
Folgende Kandidaten haben bei mir nicht funktioniert (oder die Werte sind falsch?):
private const int SW_MAXIMIZE = 0x3; // Fenster maximiert
private const int WS_MAXIMIZE = 0x1000000;
private const int WS_MAXIMIZEBOX = 0x10000;
private const int WM_MDIMAXIMIZE = 0x549;
private const int SIZE_MAXIMIZED = 0x2;
Hallo ujr!
Wie du schon schreibst, wird das Handle auch ausgelöst, wenn man das WPF-Window insgesamt verschiebt, für meine Anwendung ist das aber garnicht so schlecht.
Entsprechend deinem Rezept:
...
private const int WM_ENTERSIZEMOVE = 0x231;
private const int WM_EXITSIZEMOVE = 0x232;
...
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
System.Windows.Interop.HwndSource source = PresentationSource.FromVisual(this) as System.Windows.Interop.HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
zWndProc_msg.Content = "Aktuelle Windows Handle-Message: " + string.Format("{0:x}", msg);
zMSG.Text += "|" + string.Format("{0:x}", msg);
switch (msg)
{
case WM_ENTERSIZEMOVE: { zStatus.Text= "Größenänderung begonnen!"; break; }
case WM_EXITSIZEMOVE: { zStatus.Text = "Größenänderung abgeschlossen!"; break; }
}
return IntPtr.Zero;
}
...
zugehöriges XAML-Bsp.
...
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="10*" MinHeight="20" />
<RowDefinition Height="80*" />
<RowDefinition Height="10*" MinHeight="20" />
</Grid.RowDefinitions>
<Label Content="" Name="zWndProc_msg" VerticalAlignment="Top" FontSize="20" HorizontalAlignment="Center" />
<WrapPanel Grid.Row="1">
<TextBlock Name="zMSG" TextWrapping="WrapWithOverflow" />
</WrapPanel>
<TextBox Grid.Row="2" Name="zStatus" HorizontalAlignment="Center" FontSize="20" FontWeight="Bold" />
</Grid>
...
So funktioniert es prima!!
Vielen Dank!
Fred.
Hallo zommi!
Danke für deinen Hinweis! Lector hat allerdings recht, ich möchte eine Größenänderung eines WPF-Window überwachen und hier gibt es das OnResizeEnd - Event (noch) nicht.
Hallo Lector!
ich werde dann mal ein wenig "basteln".
Danke.
Hallo,
wie kann ich auf das "Ende" einer Größenänderung eines Windows reagieren?
Zur Zeit reagiere ich auf das Event SizeChanged, dieses wird aber schon zum Zeitpunkt der Größenänderung getriggert. Ich möchte aber erst, nachdem der Benutzer die Maustaste wieder losläßt (bei einer Größenänderung) reagieren.
Geht das?
Hallo talla!
Perfekt!
Point WordPanelPos = WordPanel.TransformToAncestor(Win_Vorlagenauswahl).Transform(new Point(0, 0)); // Position des WordPanels (innerhalb von Win_Vorlagenauswahl)
Danke!
Fred.
Hallo,
für einen API-Aufruf benötige ich die Position eines WPF-Panels (Left, Top).
Kann ich diese irgendwie ermitteln?
Hallo CSL und talla!
Muss ich meine Wordvorschau wohl auf einer Windows-Form lassen. Gut dass man in einem Projekt beides (WPF und Form) einsetzen kann.
Danke für eure Antwot(en)!
Hallo,
danke für Eure Beiträge.
OLE-Container gab es (meines wissens) nur bis VB 5 oder 6.
MS empfiehlt deshalb die Verwendung des Web-Browsers Objektes zur Darstellung von Office-Dokumenten. Dabei sind die Einschränkungen jedoch sehr zahlreich...
Mit Windows Form funktioniert das Einbinden von Word in ein Panel zufriedenstellend.
Dies für WPF zu erreichen stellt aber auch schon wieder eine Herausforderung dar.
Doc(2007)-Dokumente sind doch jetzt XML-Dokumente. Gibt es da einen neuen Ansatz dies mit einem XML-Objekt darzustellen zu können?
Fred.
Hallo,
ich möchte API-Funktion(en) benutzen. Deshalb benötige ich von einem WPF-Control ein Handle. Gibt es eine Möglichkeit dieses abzufragen?
int WPF_Handle = new System.Windows.Interop.WindowInteropHelper(WPF_Panel).Handle;
...
dies erzeugt den Kompiler-Fehler
Die beste Übereinstimmung für die überladene System.Windows.Interop.WindowInteropHelper.WindowInteropHelper(System.Windows.Window)-Methode hat einige ungültige Argumente.
1-Argument: Kann nicht von "System.Windows.Controls.Panel" in "System.Windows.Window" konvertiert werden.
Ist in WPF ein Panel überhaupt ein Fenster?
Fred.
Hallo FZelle!
Nein 8o, nein nein so was b... . 3 Stunden arbeit umsonst. Aber ich weis jetzt was Globaler Namenspace ist und und und.
Den Verweis muss man auch aktualisieren, sonst erkennt VS die Veränderung an der DLL nicht.
Also vielen Dank für deinen/eure Hinweis(e)!
Fred.
Hallo JAck30lena!
Danke für deine Antwort.
ar_Global ist schon der Namespace, deshalb dachte ich, brauche ich keine Using Anweisung.
namespace ar_Global
{
class clsUser32
{
public clsUser32()
{ }
[DllImport("user32.dll")]
public static extern Int32 FindWindow(string strclassName, string strWindowName);
...
Hallo,
ich habe "alles" überprüft und trotzdem muss etwas nicht passen...
Ich möchte auf eine DLL-Klassenbibliothek, die ich in einem anderen Projekt erstellt habe, im aktuellen Projekt zugreifen.
Ich habe einen Verweis auf die DLL gemacht. Alles wird problemlos/korrekt angezeigt/erkannt.
Wenn ich jetzt aber auf den Namenspace zugreifen will
private ar_Global.clsUser32 User32 = new ar_Global.clsUser32();
kommt die Fehlermeldung:
Der Typ- oder Namespacename "ar_Global" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
Der Assemblyverweis ist aber doch vorhanden!
Was könnte den da noch falsch sein?
Hallo,
ich gebe wahrscheinlich die falschen Begriffe ein, aber zu diesen Thema konnte ich nur sehr wenig finden...
Ich möchte Word, genauer gesagt eine Seitenansicht eines Dokuments in einem Panel (WPF) anzeigen. Geht das überhaupt?
Dazu müßte der Parent Eigenschaft der Wordinstanz doch das Panel-Handle zugewiesen werden oder?. Diese ist aber schreibgeschützt.
pWord.Parent = WordPanel;
Wie kann man es denn trotzdem angeben??
Hallo MrSparkle!
Na klar!!! Nur pWord casten und dann die Methode aufrufen. Entschuldigung, ich habe es erst gesehen, als ich deine Lösung sah 8o.
Kompiler ist zufrieden, zur Laufzeit keine Fehler, alles besten.
Vielen Dank!!
Fred.
Hallo JAck30lena!
Das war auch mein erster Ansatz. Ich konnte es nur nicht umsetzen, da ich ja von dem Objekt pWord die Quit Methode aufrufen möchte.
Dies geht natürlich nicht:
Microsoft.Office.Interop.Word._Application.pWord.Quit(ref objFalse, ref missing, ref missing);
die "Microsoft.Office.Interop.Word._Application" enthält keine Definition für "pWord"!.
Danach habe ich versucht es durch casting zu lösen:
(Microsoft.Office.Interop.Word._Application)pWord.Quit(ref objFalse, ref missing, ref missing);
da bekam ich die Fehlermeldungen:
Nur assignment-, call-, increment-, decrement- und "new object"-Ausdrücke können als Anweisung verwendet werden.
2.
Eine Konvertierung vom Typ "void" in "Microsoft.Office.Interop.Word._Application" ist nicht möglich.
um die Ohren gehauen.
Was mache ich den 1. An der Vollqualifizierung oder 2. an dem Casting falsch???
Vielen Dank JAck30lena und JunkyXL für eure Hilfe!! ⚠
Hallo ErfinderDesRades!
Du hast natürlich vollkommen recht!!
Ich wusste bis jetzt nur nicht, dass (wie) ich das DefaulView auch "durchgehen" kann.
Vielen Dank!
Hallo,
ich möchte eine Instanz von Word schließen.
private Microsoft.Office.Interop.Word.Application pWord;
...
private void endWord()
{
object objFalse = false;
object missing = Missing.Value;
pWord.Quit(ref objFalse, ref missing, ref missing);
}
Dabei wird mir vom Compiler die folgende Warnung angezeigt:
Warnung 1 Mehrdeutigkeit zwischen der Microsoft.Office.Interop.Word._Application.Quit(ref object, ref object, ref object)-Methode und der Nichtmethode "Microsoft.Office.Interop.Word.ApplicationEvents4_Event.Quit". Eine Methodengruppe wird verwendet.
Gibt es eine Möglichkeit, dem Compiler mitzuteilen, dass ich genau die Microsoft.Office.Interop.Word._Application.Quit-Methode anwenden will?
Hallo,
vielen Dank für die zahlreichen Hinweise!
Eine DLL mit Standard-Ressourcen habe ich bereits. Ich muss mir jetzt "nur" mal in C# ansehen, wie ich diese einbinde und darauf zugreifen kann.
Also nochmals Danke für Eure Unterstützung!
Fred.
Hallo JAck30lena!
Habe im Moment nicht die Zeit, aber es müßte sich doch eine Standard-DLL mit Standard-Ressourcen, zumindest jeweils in das jeweils akt. Projekt einbinden lassen, auf die man dann zugreift?
Klare Ansage, Danke!
Hallo,
gibt es in VS nicht irgendwo Standard-Ressourcen für Standard-Buttons, damit man nicht jedesmal zB. ein Hacken-Bild als Ressource für ein OK-Button definieren muss?
Hallo JAck30lena!
War für mich verwirrend, das ich dadurch auf die zugrundeliegende Tabelle zugreife anstatt auf die Tabelle, die aus dem DefaultView resultiert. 👍
Dann kann man sich das ganze sparen und ein erneutes Result direkt aus der Tabelle ziehen:
foreach (DataRow pRow in DS_Formular.Tab_VORLAGE.Select(uzFilter))
...
Trotzdem vielen Dank!
Fred.
Hallo!
Ich setze in einem Dataset -> Table einen Filter. Wenn ich mir danach die Zeilenanzahl anzeigen lasse, bekomme ich im konkretem Beispiel 1 angezeigt.
Wenn ich anschließend die DefaultView "durchgehe", werden plötzlich alle Datensätze der Tabelle durchlaufen.
MessageBox.Show(string.Format("{0:0,0}", DS_Formular.Tab_VORLAGE.DefaultView.Count.ToString()));
foreach (DataRow pRow in DS_Formular.Tab_VORLAGE.DefaultView.Table.Rows)
{
uzBereich = (string)pRow["VORLAGE_BEZ"];
MessageBox.Show(uzBereich);
}
Hat dafür jemand eine Erklärung?
Hallo winSharp93!
Danke für deinen Hinweis!. Trotz längeren probieren/nachschlagen ist es mir nicht gelungen die TreeViewItems mit einer Datatable zu verbinden. Ich habe zwar eine Datatable, dessen Zeilen über ID-Nummern korrekt mit einem TreeViewItem verbunden werden könnten, aber es fehlt mir wieder die Möglichkeit die (jeweils passende) ID-Nummer im TreeViewItem zu speichern bzw. das korrekte Binding zu definieren.
PS.:
Die TreeViewItems werden dynamisch aus einer DataTable erstellt.
private void bdg_akt(TreeView upTree, DataTable upTable ) {
string zBereich = String.Empty; // akt. Bereich
TreeViewItem aktItem = null; // akt. Item
upTree.Items.Clear(); // BDG leeren
foreach (DataRow dZeilen in upTable.Rows) // Alle Zeilen der Tabelle durchgehen
{
if (zBereich != dZeilen["BEREICHS_NAME"].ToString()) { // Neuer Bereich?
TreeViewItem pItem_neu = new TreeViewItem(); // Neues Bereichs-Item
pItem_neu.Header = dZeilen["BEREICHS_NAME"]; // Inhalt -> Bereich
upTree.Items.Add(pItem_neu); // Item im Root des TreeView hinzufügen
aktItem = pItem_neu; // akt. Item = BereichsItem
}
TreeViewItem pItem_neu2 = new TreeViewItem(); // Neues Vorlage-Item
pItem_neu2.Header = dZeilen["VORLAGE_BEZ"]; // Inhalt -> Vorlage
pItem_neu2.MouseDoubleClick+=new MouseButtonEventHandler(Item_MouseDoubleClick); // EventHandler für Maus doppelklick bereitstellen
aktItem.Items.Add(pItem_neu2); // Item im akt. Bereich des TreeView hinzufügen
zBereich = dZeilen["BEREICHS_NAME"].ToString(); // akt. Bereich merken
}
}
Jetzt wäre es schön, wenn beim Klicken auf ein TreeViewItem auch der Datensatzzeiger der DataTable auf dem korespondierenden Datensatz steht.
Könnt ihr mir helfen?
Hallo,
manchmal ist die Erkenntnis, das es so nicht funktioniert, die (einzigste) Erkenntnis.
Also, ich benötige zur Selektierung eines Vorganges einen eineindeutigen Index eines Eintrages (TreeviewItem) aus einem strukturierten Baumdiagramm (Treeview).
Das Baumdiagramm hat z.B. den folgenden Aufbau:
<TreeView DockPanel.Dock="Left" Width="200" FontSize="16" Name="tv_vorlage">
<TreeViewItem Header="Allgemein">
<TreeViewItem Header="Brief"></TreeViewItem>
<TreeViewItem Header="Fax"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Mietenberechnung">
<TreeViewItem Header="Mietänderung"></TreeViewItem>
<TreeViewItem Header="Bad"></TreeViewItem>
<TreeViewItem Header="Ratenzahlung"></TreeViewItem>
</TreeViewItem>
</TreeView>
0 - Allgemein
0.1 - Brief
0.2 - Fax
1 - Mietenberechnung
1.1 - Mietänderung
1.2 - Bad
1.3 - Ratenzahlung
Wenn auf den Eintrag Bad geklickt wird, soll z.B eine 12 ermittelt werden können.
Ich habe versucht, an das Header-Property des selektierten Items heranzukommen:
tv_vorlage.SelectedItem.Header
So hat es aber nicht funktioniert und eigentlich wäre mir ein Merkmal, das nicht sichtbar dargestellt werden mus lieber.
Wie könnte man das lösen??
Hallo CLS,
mit parent einfach immer höher zu gehen! Sorry...
Stehe noch am Anfang eines C#/WPF (Leidens)weg.
Mein (Ausgangs) Problem ist durch den nicht eineindeutigen Index jetzt zwar noch nicht gelöst, aber dies hat in diesem Post nichts mehr zu suchen.
Vielen Dank für deine Hilfe!!!
Fred.
Hallo CSL,
vielen Dank für deine Antwort.
Leider funktioniert es so auch noch nicht.
int index = -100;
var parent = VisualTreeHelper.GetParent(tv_vorlage.SelectedItem as DependencyObject);
if (parent.GetType() == typeof(ItemsControl)) // TreeView && TreeViewItem
index = ((ItemsControl)parent).Items.IndexOf(tv_vorlage.SelectedItem);
MessageBox.Show(index.ToString());
Mit Parent hast du bestimmt recht, aber parent verweist lt. Debuger (siehe Anhang) auf das StackPanel in dem die TreeViewItems sind. Wenn ich (nach deinem Beispiel) das casten will, kommt die Fehlermeldung:
Das Objekt des Typs "System.Windows.Controls.StackPanel" kann nicht in Typ "System.Windows.Controls.ItemsControl" umgewandelt werden.
Habe ich noch etwas übersehen?
Hallo,
ich habe ein Treeview mit strukturierten TreeItems:
<TreeView DockPanel.Dock="Left" Width="200" FontSize="16" Name="tv_vorlage">
<TreeViewItem Header="Allgemein">
<TreeViewItem Header="Brief"></TreeViewItem>
<TreeViewItem Header="Fax"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Mietenberechnung">
<TreeViewItem Header="Mietänderung"></TreeViewItem>
<TreeViewItem Header="Bad"></TreeViewItem>
<TreeViewItem Header="Ratenzahlung"></TreeViewItem>
</TreeViewItem>
</TreeView>
Wenn ich den Index der TreeViewItems abfrage, werden mir nur für die TreeViewItems der ersten (root) Ebene korrekte Werte (0 -> Allgemein, 1 -> Mietenberechnung) zurückgegeben.
MessageBox.Show(tv_vorlage.Items.IndexOf(tv_vorlage.SelectedItem).ToString());
Der Index der TreeViewItems der Ebene 2 sind immer -1.
Wie kann ich einen korrekten Index dieser Items definieren, um sie zB. programmtechnisch löschen zu können??
tv_vorlage.Items.RemoveAt(tv_vorlage.Items.IndexOf(tv_vorlage.SelectedItem));
Hallo alanblack !
Deine Antwort hat mir sehr geholfen! Der Zusammenhang, wie ich das Objekt in den Container bekomme, war mir vorher vollkommen unklar (Rahmen_Karte.Children.Insert(0, dynRectangle). Für mich stellt nun nur noch die Positionierung ein Problem dar.
Für das erste Objekt
Rahmen_Karte.Children[0].top = 10;
geht nicht.
Also nochmals Danke!
Fred
Hallo,
zur flächenmäßigen Darstellung einer Verteilung möchte ich eine größere [300-500]) Anzahl an Kreisen oder kl. Vierecken (so etwa 3x3 Pixel) auf einer Fläche (500x500 Pixel) darstellen. Die Koordinaten nehme ich aus einer Datenbank.
Ich habe ein Canvas-Panel mit der entsprechenden Größe. In Windows Forms würde ich jetzt ein Graphics Object erzeugen und "zeichnen" (grfx.DrawLine(pen, 5, 5, 6, 5))
Wie mache ich das aber in WPF? Dynamisch neue Ellipse-Objekt(e) erzeugen und positionieren? Aber wie?
Fred
Hallo Lector!
Danke! für deine total logische Erklärung (ich schäme mich).
Ohne Fehlermeldung (VS2008) sieht die Formatierung dann so aus:
<TextBlock Text= "{Binding Path=P_GEB, ConverterCulture='de-DE', StringFormat='{}{0:d}'}" />
Fred.
Hallo,
mit einem Detail der Databinding-Formatierung habe ich immer noch zu kämpfen...
Wenn ich das Databinding so definiere, bekomme ich ein richtiges (deutsches) Datum angezeigt, aber ich musste es in Klammern setzen/anzeigen.
<TextBlock Text= "{Binding Path=P_GEB, ConverterCulture='de-DE', StringFormat='({0:d})'}"/>
Sobald ich die Klammern im StringFormat weglasse, kommt die Fehlermeldung:
Fehler 1 "" wurde erwartet.
Text= "{Binding Path=P_GEB, ConverterCulture='de-DE', StringFormat={0:d}}"/>
Wie könnte ich es definieren das nur das Datum angezeigt wird?