Hallo,
ich habe einen Webservice in meine Anwendung integriert, indem ich unter "Webverweis hinzufügen" die URL 'http://***/webservices/fmisService?wsdl' eingetragen habe.
Diese hat intern Schnittstellen generiert, die ich für die Kommunikation nutzen kann.
Die Kommunikation zwischen meiner Anwendung und dem SOAP Webserver hat auch eine Zeit lang prima funktioniert.
Jetzt bekomme ich aber beim Anmelden an den Server eine Exception zurück, mit folgender Meldung.
Möglicher SOAP-Versionskonflikt: Unerwartetes Einschließen des Namespaces 'http://schemas.xmlsoap.org/wsdl/'. Erwartet wurde 'http://schemas.xmlsoap.org/soap/envelope/'.
Leider habe ich was die Geschichte mit dem Webservice und .Net betrifft nur Basiswissen.
Der Server mit dem ich kommuniziere ist extern und ich habe keinerlei Möglichkeiten irgendwas dort zu ändern.
Ich habe mal die wsdl Dateien angeschaut und keinen Unterschied zwischen der alten, wo es funktioniert hat und der heutigen gefunden.
Vielleicht kann mir jemand helfen und was hat es mit dem Namespace aufsich?
Danke und Gruß
Mighty
Hallo!
Ich habe ein Problem mit dem SmtpClient unter 3.5.
Wenn ich eine Email versenden will, bekomme ich bei einigen Emails folgende Fehlermeldung.
System.Net.Mail.SmtpFailedRecipientException: Postfach nicht verfügbar. Die Serverantwort war: must be authenticated
(NetworkCredential habe ich beachtet)
Unter .Net 4 funktioniert die Geschichte.
Ich fand schnell heraus, woran das lag.
Das Problem ist, dass die Emails, wo es nicht funktionierte im Passwort Umlaute wie (ä/ü/ö etc.) hatten.
Meine Frage ist nun ob ich unter 3.5 irgend etwas bei NetworkCredential einstellen kann, dass er die Umlaute beim Anmelden am Server richtig interpretiert.
thx
Mighty
@DaMoe80:
Hab es jetzt so geändert, wie du es gesagt hast und es funktioniert.
Das einzige was ich noch beachten musste, war die interne Eigenschaft der Sortierung des PropertyGrid noch zu ändern.
Also PG.PropertySort von CategorizedAlphabetical auf Categorized.
Also nochmals, Danke für deine Hilfe!
@DaMoe80:
Nochmals Danke, dass du dich meinem Problem annimmst.
Ich komme leider einfach nicht weiter. 🙁
Also, der TypeDescriptor spreche ich wie folgt an...
[TypeDescriptionProvider(typeof(MyTypeDescriptionProvider))]
public sealed class ClassForPG
{
[DisplayName("Eigenschaft A")]
public string MyPropertyX { get; set; }
[DisplayName("Eigenschaft B")]
public string MyPropertyY { get; set; }
[DisplayName("Eigenschaft C")]
public string MyPropertyU { get; set; }
}
public sealed class MyTypeDescriptionProvider : TypeDescriptionProvider
{
public MyTypeDescriptionProvider()
: base(TypeDescriptor.GetProvider(typeof(ClassForPG)))
{ }
public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
{
return new MyTypeDescriptor(base.GetTypeDescriptor(objectType, instance));
}
}
public sealed class MyTypeDescriptor : CustomTypeDescriptor
{
public MyTypeDescriptor(ICustomTypeDescriptor parent)
: base(parent)
{
}
public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
PropertyDescriptorCollection baseProps = base.GetProperties(attributes);
// alle DisplayName ermitteln
ArrayList arrDisplayName = new ArrayList();
foreach (PropertyDescriptor oProp in baseProps)
{
arrDisplayName.Add(oProp.DisplayName);
}
// DisplayName sortieren
arrDisplayName.Sort();
// Rückgabe nach sortierten DisplayName
return baseProps.Sort((string[])arrDisplayName.ToArray(typeof(string)));
}
}
Ich habe es versucht, aber das Endergebnis war das gleiche wie oben. 🙁
public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
PropertyDescriptorCollection baseProps = base.GetProperties(attributes);
// alle DisplayName ermitteln
ArrayList arrDisplayName = new ArrayList();
foreach (PropertyDescriptor oProp in baseProps)
{
arrDisplayName.Add(oProp.DisplayName);
}
// DisplayName sortieren
arrDisplayName.Sort();
// Rückgabe nach sortierten DisplayName
return baseProps.Sort((string[])arrDisplayName.ToArray(typeof(string)));
}
@DaMoe80:
Danke für die schnelle Antwort.
Ich werde deinen Vorschlag mal probieren.
THX
Mighty
Hallo!
Ich habe mich durch ca. 363 Themen zum Thema PropertyGrid gearbeitet, aber keine Lösung zu meinem Problem gefunden. (Zugegeben, den größten Teil habe ich nur überflogen.)
Zu meinem Problem...
Ich habe eine Klasse mit verschieden Eigenschaften.
Wenn ich ein Array mit nur einem Objekt dieser Klasse an ein PropertyGrid übergebe, dann Sortiert er mir die Eigenschaften, nach dem DisplayName-Attribute.
Wenn das Array aus mehren Objekten dieser Klasse besteht, dann sortiert mir das PropertyGrid die Eigenschaften nach dem Namen des Eigenschaftsfeldes.
Wie kann ich ermöglichen, dass er immer nach dem DisplayNamen sortiert?
Siehe Anhang
private void button1_Click(object sender, EventArgs e)
{
propertyGrid1.SelectedObjects = FillPG(1);
}
private void button2_Click(object sender, EventArgs e)
{
propertyGrid1.SelectedObjects = FillPG(3);
}
private object[] FillPG(int count)
{
ArrayList objects = new ArrayList();
for (int i = 0; i < count; i++)
{
ClassForPG myObject = new ClassForPG();
myObject.MyPropertyU = "Was ganz anderes";
myObject.MyPropertyX = "Irgendwas";
myObject.MyPropertyY = "Noch irgendwas";
objects.Add(myObject);
}
return objects.ToArray();
}
THX & LG
Mighty
Danke für eure Information.
Dann werde ich mal die CW-Anweisungen entfernen und mir mal System.Diagnostics.Debug näher anschauen.
THX
Mighty
Hallo!
Ich habe in meiner WindowsForms-Anwendung hin und wieder Console.Writeline drin, um bestimmte Werte während des Debuggens an das Ausgabefenster auszugeben um diese zu überprüfen.
Wenn ich die Anwendung nun im Release erstelle, entfernt dann der Compiler diese Console.Writeline Anweisungen? (Da das Ausgabefenster ja nur in der IDE existiert?)
THX
Mighty
Hallo!
ich habe hier im Forum gesucht und es auch mit Google versucht, aber leider keine ausreichende Antwort bekommen.
Ich kann ja mit Visual Studio (nutze die 9er) ein Setup für meine Anwendung erstellen lassen.
Meine Frage ist nun, kann ich irgendwo einstellen, dass das Setup mehrsprachig ist.
Also wenn ich Localization=Neutral einstelle. Erhalte ich immer nur ein englischsprachiges Setup. Egal ob mein Betriebssystem englisch oder deutsch ist.
Mir geht es nur um ein mehrsprachiges Setup, nicht um die Anwendung.
Hoffe ihr könnt mir da helfen.
thx & cu
Mighty
Danke für eure Antworten.
Ich nutze VS 2008 und da wird wohl auch "der Hund begraben sein".
THX & LG
Mighty
Hallo!
Ab C# 4.0 soll es wie in C++ möglich sein, optionale Parameter für eine Methode, recht einfach, festzulegen.
public void Foo(string s = "Hallo Welt")
{
Console.WriteLine(s);
}
public void Test()
{
Foo(); // out: Hallo Welt
Foo("Hallo Bernd"); // out: Hallo Bernd
}
Nun habe ich schon folgende Methoden gesehen, die quasi auch optionale Parameter haben (soll).
public void Foo([Optional, DefaultParameterValue(null)]string myOptionalParameter1, [Optional, DefaultParameterValue(null)]string myOptionalParameter2)
{
}
Aber wenn ich diese Methode bei mir zum testen implementiere, dann bekomme ich vom Compiler eine Fehlermeldung, wenn ich nicht beide Parameter angebe.
Kann mir da jemand weiter helfen?
Ich weiß, dass man das auch durch überladen von Methoden machen kann, aber die o.g. Möglichkeit interessiert mich einfach bzw. wieso funktioniert sie nicht bei mir.
THX & LG
Mighty
PS: Hier habe ich auch ein Beispiel gefunden.
(hier klicken)
Hallo herbivore!
Auch von meiner Seite, vielen Dank für das RegEx-Lab.
LG
Mighty
Hallo liebe Gemeinde!
Ich habe in meiner Anwendung viele verschiedene Steuerelement, deren BackColor z.B. Farbe=Control ist.
(d.h. die vom Benutzer für sein Windows festgelegte Systemfarbe für die Schaltfläche)
Ich erhoffe mir, dass ich alle Steuerelemente deren Hintergrundfarbe 'Control' ist, mit vielleicht nur einer Zeile Code die Farbe verändern kann.
Sonst müsste ich ja für jedes Steuerelementdas so angehen.
myButton1.BackColor = blau;
myButton2.BackColor = blau;
myCheckBox1.BackColor = blau;
usw.
THX & LG
Mighty
Hi!
Ich wusste nicht wie ich die Suchanfrage diesbezüglich stellen sollte, daher poste ich ein Thema, was vielleicht schon existiert. Dafür entschuldige ich mich vorab.
Wahrscheinlich ist mein Problem für die meisten ganz Easy, aber ich stehe irgendwie auf dem Schlauch.
Zur Vereinfachung, da meine eigene Klasse etwas komplexer ist, nehme ich mal eine Klasse Person (Name, Vorname, Adresse etc.) an.
Jede neue Person initialisiere ich mit…
Person person = new Person();
person.name = "name";
//etc.
//und trage diese dann in eine liste
liste.add(person);
Soweit stellt das jetzt auch kein Problem dar.
Nun dachte ich mir, wenn eine neue Person, zu einer Familie gehört, dann brauch ich doch nur den Vornamen zu ändern und der rest bleibt gleich.
Person person2 = new Person();
person2 = person;
person2.vorname = "detlef";
liste.add(person2);
Tja! Nun habe ich aber ungewollt in meiner Liste, zwei Personen mit dem selben Vornamen (Detlef), da auch der vorherige geändert wird?! Ist sicherlich irgendwo richtig Vererbung oder so, aber wie muss/kann ich das machen, denn das war ja nicht mein Ziel?
Nun könnte man sagen, lass das mit dem ersetzen weg und erzeuge einfach eine neue Person und trag halt alle Daten erneut ein, aber wie gesagt, ist meine Klasse etwas komplexer und dieser "bloss den geänderten Teil" zu ersetzen Weg, wäre für mich westenlich eleganter und schneller.
THX & LG
Mighty
@Khalid: Danke! 👍
Wenn nur alles im Leben so einfach wäre. 🙂
THX & LG
Mighty
Hallo C#-Gurus!
Ich habe mal wieder ein Problem und komme trotz Google nicht weiter.
Daher hoffe ich, dass ihr mir helfen könnt.
Ich habe in meinem Projekt mehrer Forms, bei denen im Form_Load-Ereignis quasi immer das selbe abläuft.
Da ich nicht jedesmal den Code reinkopieren will, dache ich mir, ich überlade das OnLoad-Ereignis. Ähnlich wie ich es beim KeyPress von Textbox gemacht hatte.
Nun zum Problem, bei den TextBoxen brauchte ich nur in der Form.Designer.cs in der** InitializeCompontent()** Funktion den Aufruf ...
this.textbox1 = new System.Windows.Forms.Textbox()
in
this.textbox1 = new MyTextboxClass.MyTextbox()
ändern.
Wie bzw. wo kann ich das für die Windows-Forms machen?
Die Klasse für das Überladen sieht vereinfacht so aus.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyForm
{
public class OverloadForm: Form
{
protected override void OnLoad(EventArgs e)
{
MessageBox.Show("Ich wurde überladen!");
base.OnLoad(e);
}
}
}
Danke i.V. für eure Tipps.
LG
Mighty
Hm!
Ich hab da doch noch eine Frage dazu.
Ich würde gern im Kopf des Reports ein Feld "Bemerkung" erstellen, welches die Daten von einer Textbox bekommt.
Nun zu der Frage.
Geht das irgendwie einfach zu realisieren?
Also kann ich irgendwie den Inhalt der Textbox direkt übergeben oder muss ich dafür erst eine virtuelle Tabelle erstellen mit Spalte/Zeile Bemerkung und diese dann an den Report übergeben.
THX & LG
Mighty
Vielen Dank!
Dank eurer Hilfe habe ich es. 👍
Muss man aber erstmal drauf kommen, ein typisiertes DataSet zu erstellen, um es mit dem Crystel Report zu verbinden, damit man sein DataSet aus der Tabelle darauf anwenden kann.
THX & LG
Mighty
Hallo!
Ich wollte einen Crystal Report aus einer Tabelle erstellen, die ich zur Laufzeit erzeuge, ohne eine Datenbank im Hintergrund.
Also dacht ich mir das ich das DataSet der Tabelle an den CrystalReportViewer übergebe. (siehe Code-Teil 2)
Das Form welches die Tabelle beinhaltet, übergibt sein DataSet an das Form (Report) und öffnet das selbige. (siehe Code-Teil 1)
//Tabelle erstellen ...
DataSet ds = new DataSet();
ds.Tables.Add("TAB1");
ds.Tables[0].Columns.Add("Index",System.Type.GetType("System.Int16"));
ds.Tables[0].Columns.Add("%", System.Type.GetType("System.Double"));
ds.Tables[0].Columns.Add("Stunden", System.Type.GetType("System.Double"));
ds.Tables[0].Columns.Add("Projekt", System.Type.GetType("System.String"));
DataRow dr = ds.Tables[0].NewRow();
// ------------------------
// DATAGRID mit Daten füllen
// ...
// ...
// ------------------------
ds.Tables[0].Rows.Add(dr);
dataGridView1.DataSource = ds.Tables[0];
Report rep = new Report();
rep.MyDataset=ds;
rep.Show();
//...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace CSharpAnfaenger
{
public partial class Report : Form
{
private DataSet _myDS = null;
public DataSet MyDataset
{
get { return _myDS; }
set { _myDS = value; }
}
public Report()
{
InitializeComponent();
}
private void crystalReportViewer1_Load(object sender, EventArgs e)
{
CrystalReport1 oRep = new CrystalReport1();
oRep.SetDataSource(MyDataset.Tables[0]);
this.crystalReportViewer1.ReportSource = oRep;
}
}
}
Leider zeigt mir der Report keine Daten an.
Gut, als ich mich durch das WWW gegoogelt hatte, war mir klar warum, CrystalReport1.rpt muss vorher mit Feldern definiert sein.
Nun zu meiner Frage, wie kann ich diese Felder erzeugen, wenn ich doch vorher noch gar keine Daten habe? Oder anders gefragt, wie kann ich ein pseudo-Report erstellen, den ich später mit den Daten des DataSet füllen kann.
Ich hoffe mich verständlich ausgedrückt zu haben und vor allem auf hilfreiche Antworten.
THX & LG
Mighty
Danke für die Tips!
Mit dem "nach vornbringen" ist eine gute Idee.
Wobei ich als Newbie mich mit den Events trotzdem auseinander setzen muss,
damit ich C# besser verstehen kann.
LG
Mighty
Hallo!
Zuerst mal will ich sagen, dass ich ein Newbie im Programmieren mit C# bin.
Aber da ich es lernen und verstehen will, muss ich fragen um Antworten zu finden.
Denn auch der erste Schritt gehört zum Weg.
Also meine Frage ist wahrscheinlich für die meisten User hier sehr trivial. 🙁
Ich rufe über ein Submenü-Eintrag ein Form auf, und wenn dies erfolgt soll der Menüeintrag deaktiviert werden und wenn ich das Form wieder schließe dann aktiviert.
Mein Problem ist dass ich keine Ahnung habe wie ich das anstellen soll, dass ich von meinem Form1 auf das Menü des MDIForms zugreifen kann. 🤔
Code im MDIForm1
private void form1StripMenuItem_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.MdiForm1 = this;
f.Show();
}
Code im Form1
private void Form1_Load(object sender, EventArgs e)
{
//deaktivieren (theo. Ansatz)
MdiForm1.form1StripMenuItem.Enabled = false
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//aktivieren (theo. Ansatz)
MdiForm1.form1StripMenuItem.Enabled = true
}
LG
Mighty
PS: Bitte... bitte... verständlich erklären.