Du willst kein Fenster, aber redirectest auch nicht. D.h. er weiß nicht wohin er die Outputs schreiben soll.
Darum heißt der Fehler ja auch: "[url]StandardOut wurde nicht umgeleitet[/url] oder der Prozess wurde noch nicht gestartet."
ShellExecute ist ja auch ausgeschalten.
Schalte einfach das RedirectStandardOutput auf true und fertig. Wenn dich der Output nicht interessiert musst du ihn auch nicht lesen.
Was hat das mit Aero zu tun?
Beachte das wir von Aero effekten Sprechen die unter XP nicht funktionieren. Nicht von den normalen Aero styles.
Aero effekte muss man unter WPF explizit aktivieren (Siehe mein Beispiel) und für XP braucht man ein fallback.
D.h. die WPF Applikationen können bei Windows Vista/7 mit benutzten Aero effekten anders aussehen als unter XP ohne Aero.
Nur wenn du auf Aero Effekte verzichtest und alle Controls selber Styles, nur dann ist es auf allen Systemen identisch. Am sonsten greift bei den normalen Controls das Theming und er lädt die Luna styled Controls bei XP und die Aero styled Controls unter Vista/7. (Und die Classic styles wenn Windows auf Classic gestellt wurde) System nativ halt.
Hallo,
ich habe eine Liste an ein ComboBoxColumn per DataSource angebunden.
Das Problem ist, wenn das gewählte Comboboxitem nicht mehr in der Liste vorhanden ist, und somit nicht mehr in den Items der Combobox vorhanden ist, wird ein Fehler generiert.
Wie kann man das vermeiden?
Danke
Hallo AlexanderKiebler,
zu deiner Eingangsfrage:
du kannst bei der Invalidate-Methode auch einen Bereich angeben, d.h.
Rectangle rect = new Rectangle(x, y, w, h);
Invalidate(rect);
Nun zeichnest du im Paint-Event ganz normal alle Punkte - durch das Clipping wird jedoch nur der Clippingbereich (e.ClipRectangle) wirklich neu gezeichnet.
Danke für eure Antworten
Zumindest bin ich jetzt dem Ursprung des Problems auf die Schliche gekommen. Und zwar liegt es daran, das ich einige Felder im DataGridView auf Visible = false gesetzt habe. Der Grund ist ganz einfach: Über DataBinding lasse ich das GridView füllen, benötige jedoch einige Felder nicht (z.B. Primärschlüssel - ist für meine Benutzer uninteressant und verwirrend).
Jedenfalls bringt der Zugriff auf ein solch unsichtbares Feld eine Fehlermeldung an den Tag. Es sei denn, man clickt vorher einmal auf das DataGridView. Dann klappt alles ganz normal...
Ich kriege das Problem leider nicht in den Griff.
ClearSelection habe ich auch ausprobiert, aber die Felder die ich über DataBinding gebunden habe werden dann nicht geleer. Ich stelle mir das eben so vor, das man auch keinen Eintrag auswählen kann und wenn kein Eintrag ausgewählt ist, dann müssen natürlich auch die gebundenen Felder keinen Inhalt mehr haben.
Die einfachste Variante:
Nimm eine Schleife und warte auf jedes WaitHandle einzeln.
Für weitere Lösungen müsstest du uns zuerst sagen, was du genau tust. Was heisst "auf das Internet zugreifen"? Ladest du irgendwelche Daten runter? WebClient und seine Download...Async (z.B. DownloadDataAsync ) Methoden schon entdeckt?
Grüssli
blurry333 schrieb:
CSharp hat doch auf alle Funktionen von Windows zugriff.
Annahme: Funktionen von Windows = WinAPI
Prinzipiell Ja (via Interop irgendwelcher Art)
Aber macht es auch Sinn? Oft nicht - denn es gibt oft eine ".NET-like" Lösung.
@fr33g
Ich kann auch nur bestätigen, dass man im Studium nur sehr oberflächlich programmieren lernt. Die Leute die solche Kurse nur absitzen können nach ihrem Abschluß nicht besser programmieren als ein ehrgeiziger Teenager. Es werden eben andere Dinge gelehrt als die Details einer Sprache.
Hallo Ihr,
ich hab eine Animation an ein eigenes DependcyProperty gebunden (siehe code) aber an meinen DependencyProperty rührt sich nich, nach "BeginAnimation"??
Was mach ich Falsch? (p.s. ich hab Gegooglet, aber konnte da keine lösung finden)
public Window1()
{
InitializeComponent();
DoubleAnimation da = new DoubleAnimation();
da.From = DateTime.Now.ToOADate();
da.To = DateTime.Now.AddSeconds(10).ToOADate();
da.Duration = new Duration(TimeSpan.FromSeconds(5));
da.BeginAnimation(Window1.OutputTimeProperty, da);
}
public double OutputTime
{
get { return (double)GetValue(OutputTimeProperty); }
set { SetValue(OutputTimeProperty, value); }
}
// Using a DependencyProperty as the backing store for OutputTime. This enables animation, styling, binding, etc...
public static readonly DependencyProperty OutputTimeProperty =
DependencyProperty.Register("OutputTime",
typeof(double),
typeof(Window1),
new UIPropertyMetadata(DateTime.MinValue.ToOADate(), new PropertyChangedCallback((a, b) =>
{
(a as Window1).Output = DateTime.FromOADate((double)b.NewValue).ToString();
})));
Für alles..., vom obersten Control bis hin zum letzten Child hab ich Suspend Layout gemacht. Habe da auch schon ein Testprojekt erstellt, um zu schauen woran das liegt. Dort hab ich nur 2 Panels mit je einen Label, alles Suspended und dann die Location der Labels geändert. Die werden aber trotz dem sofort aktualisiert.
Hallo
Eins hab ich doch dazu zu sagen, es gibt die Möglichkeit einen eigenen Provider zu schreiben, an denn man sich dann hängen kann. Darauf gestossen bin ich, als ich nach einen Sql-Statment Logger fürs EntityFramework gesucht habe. Dadurch bin ich auf folgenden Artikel gestossen:
http://blogs.msdn.com/b/jkowalski/archive/2009/06/11/tracing-and-caching-in-entity-framework-available-on-msdn-code-gallery.aspx
In diesem wird ein Provider erstellt, mit dem man die Kommandos mitloggen kann und auch das ausgewaehlte select Cachen kann. Dies muss man entsprechend nur noch umschreiben (bzw. sich an die Events CommandExecuting, CommandFinished und/oder CommandFailed hängen) und seine eigenen Sql-Statments noch absetzten.
Edit:
Bzw es gibt noch was, Spezial im EntityFramework, an der Entity-Klasse kann man sich ans SavingChanges Event hängen, und dort entsprechend die veränderten Objekte wegprotokollieren. (MyDBEntities in folgenden durch eigenen Namen noch ersetzen)
public partial class MyDBEntities
{
// Diese Funktion wird in allen Konstruktoren aufgerufen, so
// Haengen wir immer an jeder Instanz
partial void OnContextCreated()
{
this.SavingChanges += delegate(object sender, EventArgs e)
{
// Ermittle meine Entitaet
MyDBEntities me = (MyDBEntities)sender;
foreach(var entity in me.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted))
{
// Debug out.....
}
}
}
}
Bzw. wenn man auf der selben Connection noch ein Sql-Statment absetzten moechte (zB um die selbe SPID zu haben) kann folgender Code benutzt werden:
public partial class MyDBEntities
{
// Diese Funktion wird in allen Konstruktoren aufgerufen, so
// Haengen wir immer an jeder Instanz
partial void OnContextCreated()
{
this.SavingChanges += delegate(object sender, EventArgs e)
{
// Ermittle meine Entitaet
MyDBEntities me = (MyDBEntities)sender;
// Hole die Verbindung
EntityConnection dc = (EntityConnection)me.Connection;
// Dies ist wichtig, hab aber nicht rausbekommen wieso
DbConnection storeConnection = dc.StoreConnection;
// Erzeuge eigenes Commando um die userinit SP abzusetzten
DbCommand command = storeConnection.CreateCommand();
command.CommandText = "userinit";
command.CommandType = CommandType.StoredProcedure;
// Parameter daran noch versorgen
command.Parameters.Add(new SqlParameter("userid", "[param]"));
// Auführen des Kommandos
command.ExecuteNonQuery();
}
}
}
Weitere Informationen zu der Funktion SavingChanges hier zu finden: http://msdn.microsoft.com/en-us/library/cc716714.aspx
MfG Marco
loks schrieb:
Prerequisites im Installer richtig setzen, dann wird bei Installation geprüft ob (mindestens) das benötigte Framework vorhanden ist.
Nur bei der Setup.exe, nicht bei der msi.
Der automatisierte Download ist unzuverlässig.