Laden...
T
thomas.at myCSharp.de - Member
SW-Entwickler Österreich / Wien Dabei seit 19.09.2005
Benutzerbeschreibung

Forenbeiträge von thomas.at Ingesamt 111 Beiträge

25.01.2012 - 10:02 Uhr

Hallo

für die lokale Speicherung kannst Du SqlCE verwenden (braucht keine Installation). Zum Synchronisieren gibt es von Microsoft das SyncFrameWork. Damit können dann lokale Datenbanken mit einem SQL-Server synchronisiert werden.

mfG
Thomas

05.01.2012 - 07:10 Uhr

Hallo

@Bugrick Wer im Glashaus sitzt ...

Eine Klasse sollte nie das Mainform kennen sondern nur umgekehrt. Das ganze sollte also so aussehen:



public class frmMain : Form
{
   public frmMain()
   {
      Logic logic = new Logic();
      dgv.DataSource = logic.GetData();
   }
} 


public class Logic
{
   public DataTable GetData()
   {
      DataTable dt = new DataTable();
      // Daten laden
      return (dt);
   }
}



Aber das sind nun wirklich die Grundlagen 😉

Thomas

03.11.2011 - 07:04 Uhr

Hallo

ich habe auch ein Programm, das auf einem Netzlaufwerk liegt und von dort direkt oder über Citrix (WIN 2003 Server) aufgerufen wird. Ich habe dafür einen Loader geschreiben, der wie in Deinem Thread "ShadowCopyFiles einer AppDomain auf Win2003 oder Netzlaufwerk?" mit Shadow-Copy arbeitet. Allerdings habe ich den Pfad für den Cache auf "C:\Dokumente und Einstellungen_user_\Anwendungsdaten_Anwendungsname___cache gelegt. Dadurch ist nur das Bootprogramm gesperrt und ich kann im laufenden Betrieb alle DLLs überschreiben. Der User hat dann beim nächsten Start das aktuelle Programm.

Grüße
Thomas

22.06.2011 - 06:35 Uhr

Hallo moelski,

also ich arbeite lieber mit partial als mit regions, daher kann ich Dir hier ein bisschen weiter helfen:

1.) Das öffnen der Dateien

öffne mit der rechten Maustaste über einem File das Contextmenü und wähle dort "Open With...". Dort kannst Du dann den "CSharp Editor" als default setzen und ab sofort öffnet sich bei einem Doppelclick immer der Editor.

2.) Events werden aus dem Designer immer in das Hauptformular eingefügt und auch dort gesucht. Man sollte ja sowieso immer aus den Events eine Methode aufrufen und diese kannst Du dann in einem anderen File unterbringen.

mfG
Thomas

19.05.2011 - 10:54 Uhr

Hallo

wir arbeiten bei uns in der Firma auch mit Git und sind sehr zufrieden damit. Es gibt ein "Master-Repository" auf einem Server, in das alle Entwickler arbeiten. Zusätzlich gibt es bei jedem Entwickler ein lokales Repository. Die Entwickler Committen in Ihr lokales Repository und pushen dann irgendwann ins Master. Wenn es dort schon Änderungen gegeben hat (weil ein anderer Entwickler inzwischen gepusht hat), dann meldet dies Git. Dann muss man zuerst ein Pull machen, damit man auf dem aktuellen Stand ist. Natürlich muss man bei Mergekonflikten händisch diese beseitigen. Ich glaube aber nicht, dass das bei anderen System anders ist. In der aktuellen "dotnetpro" (06/2011) sind mehrere Berichte über solche verteilten Versionsverwaltungssysteme enthalten.

Der große Vorteil von solchen Systemen ist, dass ich als Entwickler auch offline meine Commits und damit auch wieder Reverts machen kann.

Thomas

05.04.2011 - 05:59 Uhr

Hallo

schau Dir mal die Gantt-Komponente von PlexityHide an. Die kostet zwar etwas, kann aber Ganttdiagramme ala MS-Projekt. Ich habe damit auch eine Einsatzplanung für unsere Service-Monteure erstellt.

Thomas

11.02.2011 - 06:08 Uhr

Hallo

einfach die im Link aufgeführte DLL einbinden und die Spalten im Grid entsprechend auf die AutofilterColumns ändern.

Thomas

09.07.2010 - 06:04 Uhr

Hallo

also bei mir ist die Eigenschaft auch im Designer vorhanden. Welche Version von VS verwendest Du?

Thomas

08.07.2010 - 06:12 Uhr

Hallo

wieso bist Du der Meinung, das ein Usercontrol keine Dock-Eigenschaft hat?

Thomas

05.03.2010 - 10:32 Uhr

Hallo

ich glaube eher, das das umgekehrt sein muss. Nicht dem neuen Fenster wird das Panel als Parent zugeordnet, sonder das neue Fenster wird als Control dem Panal hinzugefügt.


    abereich abereich = new abereich();
    abereich.TopLevel = false; 
    abereich.Name = abereich.Name;
    abereich.Show(); 
    abereich.Dock = DockStyle.Fill;
    abereich.BringToFront();
    abereich.FormBorderStyle = FormBorderStyle.None;
    panel2.Controls.Add(abereich);
    this.Hide();

Thomas

28.12.2009 - 18:08 Uhr

Hallo

wir haben in der Firma auch beide ausgetestet, jeweils ca. 1/2 Jahr. Bei Mercurial ist uns aufgefallen, das das System leider immer langsamer wurde. Dies dürfte daran liegen, das HG alles im Filesystem anlegt. Dadurch dauert das Öffnen von VS oder des Explorers immer länger. Wir sind dan auf GIT umgestiegen. es gibt (unter Linux) die Möglichkeit ein HG-Repository nach GIT zu exportieren. Dadurch sind uns keine Versionen verloren gegangen. GIT legt die Versionen gepackt ab. Das Öffnen geht trotz ca. 400 Commits flott von statten. Es gibt auch für VS ein Plugin, sodaß das Commit, Push und Pull direkt aus VS geht.

Was bei diesen Systemen super ist, ist die Möglichkeit das Repository z.B. auf einem Stick zu legen und in der Firma und zuhause zu synchronisieren.

lG
Thomas

21.12.2009 - 22:08 Uhr

Hallo

die Interesse wäre wohl da, aber die Zeit nicht (Freitag abends ist immer Training). Wenn aber für mich wichtige Themen dabei sind (mache derzeit nur WinForms) könnte ich durchaus auch mal das Training zu schwänzen

lG
Thomas

21.12.2009 - 13:49 Uhr

Hallo

Du kannst beide Projekte unter VS in eine Solution packen und bei der Referenz nicht die fertige DLL, sondern das andere Projekt angeben (Add Reference / Projects). Dann werden beide in den Debug- oder Releasemodus geschalten.

lG
Thomas

20.11.2009 - 08:17 Uhr

Hallo

@Flo
leider ist es so, das die Konstrukteure die Artikel mal als Dummy anlegen und erst später die richtige Artikelnummer eingetragen wird.

@Jelly
ich habe mal in VS ein abgespecktes Schema erstellt, in dem die ganzen Beziehungen eingezeichnet sind. Vielleicht hilft Dir das ja etwas weiter.

Vielen Dank im Vorraus
Thomas

19.11.2009 - 10:40 Uhr

Hallo

genauso soll es ja auch sein. Tabelle1 sind die Artikel, Tabelle2 die Stücklisten und Tabelle3 die Rechnungen. Wenn sich jetzt eine Artikelnummer ändert, dann sollen in den anderen Tabellen diese Änderung mitgezogen werden. Und hier kann ich eben nur entweder auf die Stücklisten oder die Rechnungen das Cascade machen, aber nicht auf beide.

Die Stücklisten sind noch über die Tabelle "Geräte" mit den Rechnungen verknüpft, wobei es hier eben das Cascade auch auf das Delete gibt. (d.h. wenn es keine Stückliste mehr gibt, dann auch kein Gerät und keine Rechnung mehr)

lG
Thomas

19.11.2009 - 10:03 Uhr

verwendetes Datenbanksystem: <SQL2008>

Hallo Leute

ich habe 3 Tabellen (Tabelle1, Tabelle2 und Tabelle3). Tabelle1 hat eine Beziehung auf Tabelle2 und Tabelle3 (auf das gleiche Feld). Ich möchte nun die entsprechenden Beziehungen setzen:

Tabelle1/Feld -> Tabelle2/Feld (Delete = No Action Update = Cascade)
Tabelle1/Feld -> Tabelle3/Feld (Delete = No Action Update = Cascade)

Wenn ich diese Beziehungen dann speichern möchte, kommt folgende Fehlermeldung:


'Table1' table saved successfully
'Table2' table
- Unable to create relationship 'FK_Table2_Table1'.  
Introducing FOREIGN KEY constraint 'FK_Table2_Table1' 
on table 'Table2' may cause cycles or multiple cascade paths. 
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, 
or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.

Wenn ich in einer der beideb Beziehungen das Update=Cascade auf No Action umstelle, dann kann ich das speichern. Dann müsste ich mich aber selbst darum kümmern, wenn sich in der Tabelle1 der Wert im Feld ändert, das in der entsprechenden Tabelle der Wert nach gezogen wird.
Wo mache ich da den Fehler?

lG
Thomas

P.S. Tabelle2 und Tabelle3 stehen über eine weitere Tabelle (Tabelle4) in Beziehung. Bei dieser sind die Update und Delete-Regeln auf Cascade eingestellt.
Ich hoffe die Beschreibung ist halbwegs verständlich.

19.11.2009 - 08:30 Uhr

Hallo

Du musst die einzelnen Ausdrücke in Klammer setzen und die Hochkommas beim Wert nicht vergessen.


bs.Filter = "(Spalte1 = 'Wert') AND (Spalte2 LIKE 'Wert2%')";

lG
Thomas

02.11.2009 - 06:23 Uhr

Hallo TripleX

schau Dir mal die DataView an. Damit kannst Du eine Ansicht Deiner Daten mit einem Filter erstellen. Diese an eine Bindingsource und damit dann an Deine Listboxen.

mfG
Thomas

20.10.2009 - 21:24 Uhr

Hallo rallepralle,

schau Dir nochmals die FAQ über die Kommunikation zwischen den Forms an. Prinzipiell soll der Austausch zwischen zwei Formularen so aussehen wie hier dargestellt:

  
   Form1                                                    Form2
  +------+                                                +---------+
  |      |       direkt über Properties und Methoden      |         |
  |      |----------------------------------------------->|         |
  |      |                                                |         |
  |      |                                                |         |
  |      |      indirekt über Events                      |         |
  |      |<-----------------------------------------------|         |
  +------+                                                +---------+

Wie oben dargestellt kann Form1 direkt auf Daten (über Properties) und public Methoden von Form2 zugreifen. Umgekehrt soll dies nur über Events laufen.

lG
Thomas

15.10.2009 - 13:05 Uhr

Hallo Flo

das mit den drei Datenbanken müsste eigentlich egal sein. Beim Holen der Daten gebe ich die Datenbank mit an und bekomme dann eine DataTable zurück. Woher die Daten komme weiß mein Programm gar nicht, das wird ja in der DLL am Server gemacht (das ganze ist eine Client/Server-Anwendung). Ich habe mir eben überlegt, das ich für jede Datenbank ein typisiertes Dataset mit den Tabellen erstelle. Das hätte dann den Vorteil, das ich am Client eben nicht über Rows[x]["Name"] auf die Daten zugreifen muss.

Ich denke, dass in dieser Hinsicht auch das EF gehen müsste. Mal sehen vielleicht komme ich ja in den nächsten Tagen mal dazu in dieser Richtung mal zu testen.

Grüße
Thomas

15.10.2009 - 12:00 Uhr

Hallo Flo

schade. Das mit der Bridge hab ich mir auch schon überlegt. Nachdem ich jetzt aber eine Anwendung mit 3 Accessdatenbanken und insgesamt 31 Tabellen umschreiben darf (von Delphi auf C# mit SQL-Server) wären das 62 Routinen. Ich hatte halt gehofft, das dies einfacher ginge.

P.S. ginge das ganze eventuell mit einem anderen O/R-Mapper (EF...) einfacher?

Grüße
Thomas

14.10.2009 - 11:14 Uhr

verwendetes Datenbanksystem: <egal>

Hallo Leute

ich bekomme aus einer DLL (auf die ich keinen Einfluss habe) beim Laden aus den DB's eine DataTable zurück. Auch beim Speichern erwartet die DLL eine DataTable. Nun möchte ich aber mit typisierten DataSets weiterarbeiten. Derzeit löse ich den Umstieg wie folgt:


// laden
DS_xxx.yyyDataTable dtzzz = new DS_xxx.yyyDataTable();
dtzzz.Merge(DB.Get_Data());
dtzzz.AcceptChanges();

// speichern
DataTable dt = new DataTable(dtzzz.TableName);
dt.Merge(dtzzz.GetChanges(), true);
return (DB.Save_Data(dt));

DS_xxx sind dabei die DataSets, und yyyDataTable die darin enthaltenen Tabellen. Kann man das ganze irgendwie (über Generics und Extensions o.ä.) so umschreiben, das ich nurmehr folgendes schreiben muss:


DS_xxx.yyyDataTable dtzzz = new DS_xxx.yyyDataTable();
dtzzz.???(DB.Get_Data());

// bzw.

DB.Save_Data(dtzzz.???);

Mit .Net3.5 und seinen Möglichkeiten bin ich leider noch nicht so vertraut. Vielleicht gibt es ja einen Trick, wie ich die Umwandlung einfach gestalten kann.

mfG
Thomas

04.10.2009 - 10:26 Uhr

Hallo Juy Juka

also die Plugins wissen nicht auf welchem System die Tabelle liegt, dies ist schon über Interfaces geregelt. Nur die Serverbusinesslogik ist geteilt, eben in SQL oder Oraclezugriffe. Das Problem ist eben die Erweiterung dieser Server-BL. Hier kann es gleichzeitig zu Änderungen in beiden Bereichen kommen. Ich habe meine Serverlogik so aufgebaut, das für jede Tabelle ein eigenes Projekt vorhanden ist. Zusammen mit meinen Plugins, Libraries usw. ergeben sich derzeit 145 Projekte. Nach Deinem Aufbau wären das dann auch soviel Repositories. Wäre das dann aber nicht ein großer Aufwand alle Änderungen zu Comitten und zu Pushen, oder gibt es dann eine Möglichkeit dies Batchgesteuert zu machen?

Thomas

02.10.2009 - 17:10 Uhr

Hallo Norman-Timo

so hatte ich dies auch im ersten Entwurf gemacht. Nachdem ich aber immer über die Branches gelesen hatte, glaubte ich dies nach meinem ersten Post so aufteilen zu müssen. Aber wenn man es doch alles in einem durch macht dann kann ich ja munter so weiter arbeiten. Vielen Dank für Deine Antwort.

lG
Thomas

02.10.2009 - 14:36 Uhr

Hallo

wir wollen jetzt in der Firma (endlich) ein Sourcecontrolsystem einführen (GIT-System). Ich habe aber das Problem, das ich nicht weiß, wie ich dieses aufbauen soll. Ich habe z:B. folgene Projekte in einer Solution:

    
  Server
  Server_BL
    -- Oracle
      -- Zugriff auf Tabelle a
      -- Zugriff auf Tabelle b
      usw.
    -- SQL
      -- Zugriff auf Tabelle a
      -- Zugriff auf Tabelle b
      usw.
  Interfaces
  Remoting
  Client
    -- Plugin A
    -- Plugin B
    usw.

Jetzt greifen die Plugins vom Client über Interfaces und Remoting auf die Zugriffe der DB's zu. Ein Plugin kann sowohl auf Oracle als auch auf SQL zugreifen. Jetzt war meine Überlegung, das ich ein Repository für jeden Bereich (Server, Server-BL...) anlege und dort mit verschiedenen Branches die Zugriffe auf Oracle und SQL oder die Plugins mache. Wenn ich dies tue habe ich aber das Problem, wenn ich für ein Plugin sowohl für SQL und Oracle mache. Dann müsste ich ja dauernd zwischen den beiden Branches hin und her switchen. Oder wie läuft das ganze richtig ab?

lG
Thomas

22.09.2009 - 07:02 Uhr

Hallo XenoLith

Du hast folgenden Code für das Update verwendet:


            this.table1TableAdapter.InsertQuery("heavy", "on", "the", "woodway");
            strykerDataSet.AcceptChanges();
            this.table1TableAdapter.Update(this.strykerDataSet.Table1)

Wenn Du ein AcceptChanges auf eine Tabelle / Dataset machst, dann setzt Du alle Rowstates auf "normal" zurück. Der Updatebefehl schaut aber bei jedem Datensatz auf dieses Flag und schreibt nur die Datensätze zurück, bei denen es auf "geändert" oder "neu" steht. Probier es mal ohne diese Zeile, dann müsste es klappen.

lG
Thomas

30.08.2009 - 16:34 Uhr

Hallo

meiner Meinung nach solltest Du das Konzept von MichlG aufnehmen. 2. Formular generiert einen Event bei dem die Taste mitgegeben wird. Das vom 1.Formular registriert dieses und sendet den empfangenen Wert an das Browser-Control

lG
Thomas

17.08.2009 - 07:02 Uhr

Hallo

wie ist denn dein J-Laufwerk definiert? Normalerweise wird es irgenwie wie \fileserver*Freigabename* lauten. Und diesen Freigabenamen musst Du natürlich auch mit angeben.

mfG
Thomas

17.03.2009 - 16:39 Uhr

Hallo

probier mal folgenden Connectionstring aus :



  Data Source=(DESCRIPTION=
  (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=db.htl-kaindorf.ac.at)  (PORT=1521)))
  (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));
  User Id=golmab05;Password=****;


Thomas

21.01.2009 - 18:27 Uhr

@FZelle

nach solchen Stichwörtern habe ich gesucht. Das mit dem "Synchronisation Service" sieht ganz gut aus (habe auch schon Beispiele für Oracle im Netz gefunden). Werde mir das mal in den nächsten Tagen ansehen und dann eventuell hier darüber berichten.

Thomas

21.01.2009 - 14:42 Uhr

Hallo

ich habe das ganze so wie Krieger beschrieben hat gelöst. Für meine Zwecke reicht das ganze, auch die Geschwindigkeit geht so (250000 Datensätze in 1,5 Minuten, wobei das laden der Daten den größten Zeitanteil verbraucht).

@Norman-Timo

Kennst Du fertige Tools die auf beide Datenbanken zugreifen können?

Grüße Thomas

15.01.2009 - 18:02 Uhr

Hallo

leider ist der Server im Netz unser ERP-System (Baan), d.h. auf diesem Server kann ich keine Änderungen vornehmen. Ich möchte halt die benötigten Tabellen lokal halten, damit ich von zu Hause (Telearbeit) nicht immer online sein muss. Für den SQL-Server habe ich ein Tool "SQL-Diff" von Apex, mit dem ich diese synchron halten kann. Dieses wollte ich halt für Oracle nachprogrammieren. Daher sollte das ganze so neutral sein, das es mit beliebigen Tabellen arbeiten kann.

mfG Thomas

15.01.2009 - 13:53 Uhr

Hallo

also über die Suche habe ich nichts gefunden (ich arbeite jetzt schon seit einer Woche an dem Problem). Es soll halt am Schluss in der lokalen DB das gleiche stehn wie im Netz. Ich habe schon probiert, das händisch zu lösen, also
1.welche DS wurden gelöscht 1.welche DS sind neu 1.welche wurden geändert

Da das ganze aber für alle Rows und Columns gemacht werden muss, dauert das ganze genau so lange wie der erste Ansatz.

Gruß Thomas

15.01.2009 - 13:35 Uhr

verwendetes Datenbanksystem: <Oracle 9i und 10g>

Hallo Leute

ich habe hier zwei Orcaleserver (im Netz 9i und Lokal eine 10g-Express). Ich möchte jetzt aus dem Netzwerk einige Tabellen Lokal ablegen. Die Verbindung und das auslesen der Tabellen funktioniert einwandfrei, d.h. ich habe z.B. zwei DataTables mit den Tabellen im Programm. Wie kann ich jetzt diese beiden Tabellen vergleichen und die Änderungen dann lokal abspeichern. Im Moment löse ich dies so, dass ich die Tabelle lokal leere und alle Datensätze dann kopiere. Bei einigen wenigen und kleinen Tabellen geht dies ja noch, aber das muss doch besser gehen. Mit Merge habe ich es schon versucht, das liefert aber keine brauchbren Ergebnisse. Vielleicht weiß ja einer von den Datenbankspezialisten wie man das lösen kann.

mfG
Thomas

29.09.2008 - 11:54 Uhr

Hallo herbivore

Danke für den Tip. Ich musste nur im Backgroundworker in der Dowork-Methode über Thread.CurrentUICulture die aktuelle Sprache setzen und schon geht alles wieder (auch ohne InvokeRequired)

Wieder einmal hat das Forum super geholfen!

29.09.2008 - 09:49 Uhr

Hallo

das Problem wurde von mir vielleicht nicht ganz klar dargestellt. Bis zur Umstellung auf Mehrsprachigkeit (Localizable = false) hat ja alles mittels Backgroundworker funktioniert (der kümmert sich ja um das Invoke selbst). Nachdem ich aber Localizable auf true gesetzt habe musste ich das Invoke selbst noch abfragen (daher auch dies im Workerthread). Wenn ich das mache funktioniert ja alles wieder (keine Fehlermeldung) nur die Texte sind dann eben nicht in der gewünschten Sprache sondern in der Default. Für mich sieht es so aus, alsob der Workerthread eben in einem Defaultthread läuft und die Sprache noch in einem zusätzlichen Thread gestartet wird, aus dem dann der Backgroundworker arbeitet.

Thomas

29.09.2008 - 08:58 Uhr

Hallo Leute

Ich habe eine Server/Client-Anwendung mit einem Pluginsystem auf der Clientseite. Diese werden über eine seperate Domain im Clienthauptprogramm geladen. In einem Modul ist eine längerdauernde Funktion, die Daten aus eine Datenbank in Excel umkopiert. Um die GUI nicht zu blockieren, wurde diese Funktion in einen Backgroundworker ausgelagert. Im Plugin wird ein Fortschrittssfenster geöffnet und der Backgroundworker gestartet. Dieser aktualisiert dann einen Fortschrittsbalken auf dem Formular. Dies funktioniert alles bestens. Nun ist mein Programm aber mehrsprachig aufgebaut (über die mechanismen von .NET, also Resourcen ...). Hier mal die Code-Relevanten Teile:

Plugin:



    private void RunBackground()
    {
      frmFortschritt = new Fortschritt(this.Bounds);
      frmFortschritt.Max = (akt + ms + 1) * frmWahl.Gewaehlt.Count;
      frmFortschritt.Closed += new EventHandler(frmFortschritt_Closed);
      frmFortschritt.Cancel = Export;
      frmFortschritt.Show();

      bgwExcel.DoWork += new DoWorkEventHandler(bgwExcel_DoWork);
      bgwExcel.ProgressChanged += new ProgressChangedEventHandler(bgwExcel_ProgressExport);
      bgwExcel.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwExcel_ExportCompleted);
      bgwExcel.WorkerReportsProgress = true;
      bgwExcel.WorkerSupportsCancellation = true;
      bgwExcel.RunWorkerAsync(Export);
    }
 
    private void bgwExcel_ProgressExport(object sender, ProgressChangedEventArgs e)
    {
      Show_Fortschritt();
    }

    private void bgwExcel_ExportCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
      if ((bool)e.Result)
      {
        frmFortschritt.Set_Text(Properties.Resources.DatenWurdenExportiert);
        //Show_Text(Properties.Resources.DatenWurdenExportiert);
      }
    }
		
    delegate void SetTextCallback(string text);

    private void Show_Text(string Text)
    {
      if (frmFortschritt != null)
      {
        if (frmFortschritt.InvokeRequired)
        {
          SetTextCallback d = new SetTextCallback(Show_Text);
          frmFortschritt.Invoke(d, new object[] { Text });
        }
        else
          frmFortschritt.Set_Text(Text);
      }
    }

    private void Show_Fortschritt()
    {
      if (frmFortschritt != null)
      {
        // if (frmFortschritt.InvokeRequired)
        // {
        //   frmFortschritt.Invoke(new MethodInvoker(Show_Fortschritt));
        //   return;
        // }
        frmFortschritt.Aktuell = frmFortschritt.Aktuell + 1;
        frmFortschritt.Set_Text();
      }
    }

Fortschrittssdialog:


    public int Aktuell 
    { 
      get { return (pgbFortschritt.Value); } 
      set { pgbFortschritt.Value = value; }       // <-- Hier Fehler
    }

    public void Set_Text(string Text)
    {
      label1.Text = Text;                                 //<-- Hier Fehler
      btnCancel.Text = "OK";
    }


Wenn ich das Programm jetzt starte, dann bekomme ich beim Aktualisieren des Fortschrittbalkens (im ProgressChanged) und beim Completed die Fehlermeldung : "Ungültiger threadübergreifender Vorgang". Wenn ich dann den auskommentierten Teil einbaue, dann funktioniert das Programm wieder, allerdings sind dann die Texte in Deutsch (also Defaultsprache). Kann mir jemand helfen, wie ich das Problem löse, so dass die Texte in der gewünschten Sprache ohne CrossThreadError angezeigt werden?

vielen Dank im Vorraus

Thomas

29.10.2007 - 08:03 Uhr

Hallo Ralf

schau Dir auch mal die Kalenderkomponente von http://www.componentgo.com/ an. Diese kosten nicht allzu viel und sind ja vielleicht für Deine Zwecke ausreichend.

mfG
Thomas

01.10.2007 - 11:34 Uhr

Hallo lindesbs,

schau Dir mal den "Windows Resource Localization Editor (WinRes.exe)" an, ist von Microsoft (siehe http://msdn2.microsoft.com/de-de/library/8bxdx003(VS.80).aspx). Damit kannst Du Deine Texte und sogar die Formulare bearbeiten

mfG
Thomas

10.09.2007 - 07:38 Uhr

Hallo HuStLeR,

Du könntest auch noch eine Abfrage einbauen, ob die Aktuelle Zeit mehr als z.B. 15min nach der Startzeit ist. Dann halt nicht klingeln, sonst schon. Der Vorschlag mit dem Tag hat halt den Nachteil, dass Du den Wecker jeden Tag neu stellen musst.

Thomas

06.09.2007 - 08:26 Uhr

Hallo

füge deine Bibliothek einfach zu der Solution als Projekt hinzu und bei den Referenzen wählts Du dann aus dem reiter "Projects" deine Bibliothek aus. Dadurch wird immer das gleiche "Ausgabeformat" gezogen

Gruß
Thomas

27.06.2007 - 08:36 Uhr

Hallo Rainbird

danke, das war es. Ich hatte die Klasse in einer anderen Assembly mit untergebracht, nach dem trennen lief es einwandfrei. Das mit dem Interface werde ich auch mal umstellen.

mfG
Thomas

22.06.2007 - 22:51 Uhr

Hallo

ich schreibe gerade eine Remoting-Anwendung. Bisher klappt alles recht gut. Nun stehe ich aber vor dem Problem, eine Klasse via Remoting zu übertragen. Hier die relevanten Teile (leicht gekürzt)

 

// Klasse, die übertragen werden soll
namespace Projektdaten
{
  [Serializable]
  public class Projektdaten
  {
    /// <summary>
    /// Projekt
    /// </summary>
    public string Titel
    {
      get { return _Titel; }
      set { _Titel = value; }
    }
    private string _Titel = String.Empty;
	}
}

// Server
using Projektdaten;

namespace RemotingObjects.Planung
{
  public class Planung : MarshalByRefObject
  {
    public Projektdaten Get_Projektdaten(string Projekt)
    {
      Projektdaten daten = new Projektdaten();
      daten.Titel = "Titel des Projekts";
      return (daten);
    }
	}
}

// Client
using Projektdaten;

namespace Planung.Stunden
{
  public partial class Stunden : Form
  {
    private void Set_Projektdaten(string Projekt)
    {
      Projektdaten dat = new Projektdaten();
      dat.Angebot = "Test";					// Das geht
      dat = _Excel.Get_Projektdaten1(Projekt);		 // hier Exception
    }
	}
}


Die Klasse "Projektdaten" ist natürlich am Server und am Client als Referenz (mit Copy local = true" mit eingebunden. Trotzdem bekomme ich immer folgende Fehlermeldung:

System.Runtime.Serialization.SerializationException was unhandled
Message="Die Assembly Projektdaten, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden."
Source="mscorlib"......

Kann mir vielleicht jemand sagen, wo der Fehler liegt oder wo ich suchen muss? Ich habe schon diesen Beitrag - Remoting werte zurücklesen - gefunden, sehe aber keinen unterschied zu meinem Beispiel.

mfG Thomas

23.02.2007 - 22:44 Uhr

Hallo Hulkstar

bei mir funktioniert das mit folgenden Einstellungen :

Output_Language : English
Use_Windows_Encoding

mfG Thomas

26.12.2006 - 11:04 Uhr

Hallo juetho

ich finde das hat mit sauberen programmieren nichts zu tun. Ich habe im Moment auch so eine Anwendung, wo die Daten aus einer Tabelle kommen und im Grid dargestellt werden. Allerdings sind im Anschluss an die Daten noch 4 Summenzeilen, die Aufgrund der Daten in der Tabelle berechnet werden. Diese werden im Grid natürlich händisch eingefügt und NICHT in der Tabelle gespeichert. Dies ginge auch garnicht, da in der Spalte in der das Datum steht jetzt der Text für die Zeile (z.B 'Summe über xyz').

mfG Thomas

15.12.2006 - 10:02 Uhr

Hallo herbivore

genau so funktioniert es, vielen Dank

Thomas

14.12.2006 - 22:00 Uhr

Hallo Roki

beim zweiten Aufruf sollte doch InvokeRequired auf "false" sein, da es ja vom GUI-Thread aufgerufen wird?

Thomas

14.12.2006 - 21:31 Uhr

Hallo

ich habe (bei einer Client/Server Anwendung mit Remoting) folgenden Code:



    private delegate void InsertListBoxDelegate(string s);
    private void InsertListBox(string s)
    {
      if (this.InvokeRequired)
      {
        this.Invoke(new InsertListBoxDelegate(InsertListBox), new Object[] { s });
      }
      else
      {
        lstMessages.Items.Add(s);
      }
    }

    // wird aus Remotingsystem aufgerufen (= anderer Thread)
    private void cb_OnCallbackReceived(object sender, SubmitEventsArgs e)
		{
      string s = string.Format("{0} sagt: {1}", e.Sender, e.Message);
      MessageBox.Show(s);
      InsertListBox(s);
		}


Das System empfängt die Botschaft (Messagebox im Event), geht dann in die Delegatemethode und hängt sich dann bein "this.Invoke" auf. Der Debugger lässt sich nur mehr mit "Stop" abbrechen, es kommt keine Fehlermeldung o.ä. Ich habe schon die diversen Beiträge (z.B. von herbivore in der FAQ) gelesen und wenn ich alles richtig verstanden habe, sollte der obige Code doch richtig sein?
Ich hoffe Ihr könnt mir auf die Sprünge helfen, wo der Fehler liegt, da ich bis jetzt noch nichts mit Threads zu tun hatte.

vielen Dank im vorraus
Thomas

30.11.2006 - 07:15 Uhr

Hallo Olcay

Der fraktionale Teil des TDateTime-Wertes gibt die Tageszeit an d.h 06:00 Uhr wäre dann 0,25 und 18:00 entspräche 0,75. Also 1.0 entspricht 86400 Sekunden, damit kannst Du es leicht umrechnen

mfG
Thomas

01.09.2006 - 09:35 Uhr

Hallo

wenn Du eine BindingSource verwendest, dann kannst Du im PositionChanged-Event die ID des markierten Datensatzes abspeichern, und diese dann nach dem sortieren über die Find-Methode wieder suchen (siehe auch Artikel im Dotnet-Magazin 7/8.06).

Thomas