Laden...
D
dschmoegner myCSharp.de - Member
Angestellter Göttingen Dabei seit 24.02.2005 280 Beiträge
Benutzerbeschreibung

Forenbeiträge von dschmoegner Ingesamt 280 Beiträge

14.10.2008 - 17:14 Uhr

Evtl. hilft hier der Weg übers Objectmodell.

Bei CodeProject gibts diesen Artikel.

Ansonsten ist mir noch aufgefallen, dass du einen kleinen Fehler in deinem Codebeispiel hast. die URL müsste .../_vti_bin/Versions.asmx lauten. Denke mal der Fehler ist nur beim kopieren entstanden, aber wollte es der Sicherheit halber angemerkt haben.

13.10.2008 - 21:50 Uhr

Hallo,

denke mal du wirst dieses schon ergoogelt haben. Dennoch hier der Link zu MSDN.

Dort steht dass, der Übergabeparameter aus Foldername/Filename bestehen muss. Mir ist dieser Fehler in einem anderen Zusammenhang auch schon mal untergekommen, kann mich leider nicht mehr erinnern welchen Fehler ich dabei gemacht hatte.

Hoffe dir nichts erzählt zu haben was du nicht schon wusstest.

Grüße

16.09.2008 - 10:42 Uhr

Hi,

was meinst du mit Logging genau? Läuft das Paket in einem Agent Job? Wird es manuell angestossen? Für Agent Jobs gibt es die History, dort kannst du sehen ob das Paket erfolgreich gelaufen ist oder ob und welche Fehler es gab.

Grüße

02.09.2008 - 08:26 Uhr

Hi,

warum sollte dies nicht möglich sein????
Siehe:

Zitat:
>

Unterbericht

Eigenschaften des übergeordneten Containers werden ignoriert. Eigenschaften wie Size, Width und Size sowie Height werden aus der Berichtsdefinition des Unterberichts übernommen. Das Berichtselement eines Unterberichts in einem übergeordneten Container wird automatisch vergrößert, um den Unterbericht aufzunehmen.

Der übergeordnete Container des Unterberichts muss zur Vermeidung von Leerraum die gleiche oder eine geringere Breite aufweisen als der Unterbericht.

Grüße

19.08.2008 - 19:12 Uhr

Hi,

du musst die Tabelle selber bauen. Hier ein kleines Beispiel:

Create Table DIM_Datum
(
MinuteID int,
Minute nvarchar,
StundeID int,
Stunde nvarchar,
TagID int,
Tag datetime,
WochentagID int,
Wochentag nvarchar,
WocheID int,
Woche nvarchar,
MonatID int,
Monat nvarchar,
QuartalId, int
Quartal nvarchar,
Jahr int
)

TagID ist ein guter PK denke ich.

Values könnten dann so ausschauen:
(selbe Reihenfolge wie oben)
1559 (Die 15 steht für die Stunde)
59 min
2001010115 (TagID vorneweg um eine Zuordnung zu haben)
15 h
20010101
01.01.2001
1
Montag
200101
2001-01
200101
Jan 01
20011
Q1-2001
2001

Allerdings könnte es hierbei Probleme mit der Hierarchie geben. Ob der Cube das dann noch aggregieren kann kann ich nicht beantworten. So tief bin ich bisher nicht gegangen.

14.08.2008 - 15:57 Uhr

Hi,

etwas spät aber hoffentlich nicht zu spät. 🙂

InteractiveSize ist die Property. Wenn du Height auf 0 setzt wird das Paging ausser Kraft gesetzt.

Grüße

07.08.2008 - 14:12 Uhr

Hi,

es gibt noch Third Party Componenten. NSort zum Beispiel. Out of the Box geht wohl nur noch Aggregate, aber diese macht ja ein GROUP BY und dazu noch ein Distinct. Alles in allem würde ich sagen bleibt dir nur die Struktur des Paketes noch einmal zu überdenken oder die besagten Third Party Tools.

Gruß
dschmoegner

18.09.2007 - 14:50 Uhr

Kleiner Hinweis zum Ende.

Mithilfe der DeleteRow-Methode können Sie den Datensatz am angegebenen Index programmgesteuert aus der Datenquelle löschen. Diese Methode wird in der Regel verwendet, wenn ein Datensatz von außerhalb des GridView-Steuerelements gelöscht werden muss, z. B. von einem anderen Steuerelement auf der Seite. Der Aufruf dieser Methode löst außerdem das RowDeleted-Ereignis und das RowDeleting-Ereignis aus.

Der letzte Satz aus dem MSDN Auszug macht deutlich warum du eine StackOverflowException bekommen hast.

Ich nehme an du hast es so ähnlich versucht:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        GridView.DeleteRow(e.RowIndex);
    } 

DeleteRow() löst eben das RowDeleting und das RowDeleted Event aus. Wenn du in den EventMethoden dann DeleteRow() aufrufst erzeugt du eine Schleife die irgendwann zum StackOverflow führen muss, wenn man keine Abbrechbedinung definiert ist.

18.09.2007 - 13:15 Uhr

Schau doch mal ob die entsprechenden Zeilen auch im DataSet gelöscht werden. Wenn nicht ist es kein Wunder, dass nach dem neuen Seitenaufbau die alten Werte noch drin stehen.

18.09.2007 - 11:31 Uhr

Vor allem wie lautet die ErrorMessage der Exception?

18.09.2007 - 09:55 Uhr

Hallo Gurrnder,

mir fällt jetzt auf Anhieb keine Grund für eine StackOverflowException ein. Wenn du eine Row löscht dann vernichtest du doch eher Werte als den Stack mit Werten zu befüllen. Schau doch mal in der MSDN Doku ob DeleteRow() überhaupt eine Exception wirft, die du abfangen kannst.

Gruß
dschmoegner

17.09.2007 - 16:33 Uhr

Hallo Gurrnder

evtl. liegt es am PostBack oder am ViewState der Controls. Normalerweise wird mit jedem Klick auf deinen Button ein PostBack ausgelöst und die Controls verlieren ihre Werte.

Gruß
dschmoegner

17.09.2007 - 15:37 Uhr

Hallo,

dies sollte dir eigentlich weiterhelfen. Mit jedem OnClick des Buttons wird eine Row erzeugt und diese dem DataTable hinzugefügt.

03.09.2007 - 14:25 Uhr

Ich denke ein Server auf dem ein Versionierungstool läuft ist eine gute Alternative. Auf diesem Server könnte ja dann auch gleichzeitig das Webprojekt getestet werden, vielleicht sogar mit Deployment-Tests.

30.08.2007 - 16:34 Uhr

Hallo,

verstehe ich das richtig, dass das Projekt auf dem Rechner deines Entwicklerkollegen entwickelt wird und du mit deinem Visual Studio Zugriff auf die Sourcedateien haben möchtest?

Oder meintest du, dass das Projekt auf einem Server liegt und ihr beide Zugriff auf die Sourcedateien mit euren eigenen Maschinen haben wollt?

04.04.2007 - 11:41 Uhr

Um eine Lösung zu finden, bin ich von dem Ansatz einer Resourcendll zurückgegangen und habe nun in den einzelnen Komponenten Resourcenfiles angelegt. Darüber funktioniert die Lokalisierung auch so wie ich es mir erhofft hatte.

Danke für die Hilfe.

Gruß
dschmoegner

27.03.2007 - 11:30 Uhr

Danke herbivore,

leider hat es keinen Erfolg gebracht. Ich werd mal weiterschauen wie ich der App beibiegen kann ne anderen Resourceneintrag zu verwenden.

Gruss
dschmoegner

Nachtrag:
CurrentCulture ist de-DE.

Noch ne Nachfrage. Die resources.dll habe ich als Verweis dem Projekt hinzugefügt, da ich der Meinung war dies entspräche dem Kompilerparameter "/resource:<Dateiname>". So langsam keimen da in mir Zweifel auf.

27.03.2007 - 10:44 Uhr

Nach einigen Recherchen scheint es so als würde mit new CultureInfo nicht auf die angegebene Kultur gewechselt werden. Das dürfte der Grund sein warum immer die Texte der Standardkultur verwendet werden. Zumindestens stellt es sich so heraus wenn ich dieses Beispiel durchgehe. Dort bekomme ich auch immer nur die Einträge der Standardresource angezeigt.

Bringt mich zwars nicht auf einen Lösungsweg, aber hilfreich ist es evtl. trotzdem. 🙂

Gruss
dschmögner

26.03.2007 - 09:56 Uhr

Hallo,

nach dem ich den Artikel von egrath über die Resourceneinbindung gelesen habe, wollte ich versuchen eben dieses für die Lokalisierung meiner Software zu verwenden. Folgendes habe ich vor. Eine Lokalisierung für die Kultur de-DE und eine Lokalisierung für alles andere. Dies müsste ja dann der Invariant Culture entsprechen. Wenn ich nun die ResTest.resources und die ResTest.de-DE.resources in eine DLL packe bekomme ich beim Ausführen dieses Codes:

ResourceManager locRm = new ResourceManager("ResTest", Assembly.LoadFile("resources.dll"));
            MessageBox.Show(locRm.GetString("strEnter", new CultureInfo("de-DE")));

immer die englischen Einträge, die für die Invariant Culture hinterlegt wurden, angezeigt. Wenn ich im Konstruktor für den ResourceManager statt ResTest ResTest.de-DE schreibe bekomme ich die deutschen Einträge.

Liegt es an der Verwendung der Invariant Culture? Muss ich für die Lokalisierung explizite Kulturen verwenden?

Grüße
dschmoegner

13.09.2006 - 10:54 Uhr

Danke herbivore,

werd ich mir mal zu Gemüte führen.

Gruss
dschmoegner

12.09.2006 - 11:09 Uhr

Is ne Idee auf jeden Fall. Allerdings generiere ich mit meinen Importdateien den Datenstamm, da wir grad von einer Warenwirtschaftslösung auf eine andere umsteigen.
Die bisherige is veraltet, ungepflegt und bietet natürlich keinerlei Schnittstellen zur neuen. Tja und da sitze ich nun zwischen.

12.09.2006 - 10:58 Uhr

Hi Lord Hessia,

danke für deine Antwort. Die Daten werden von mir am Ende im csv als Importdateien abgelegt. Kann da also nicht auf mögliche Implementierungen zurückgreifen. Allerdings ist jetzt schon wieder alles anderst und Cheff meint er braucht die Daten am besten gestern also sind Dubletten zweitrangig. 8o Na ja wie der Cheff es will 🤔

12.09.2006 - 07:42 Uhr

Moin,

ich stehe vor dem Problem, dass ich eine Datei mit Adressen bekomme in der sich leider auch Dubletten befinden können. Als Beispiel DSMZ GmbH oder einfach nur D S M Z. Mit einem einfachen String Compare bekomme ich diese Daten ja nicht gefiltert. Es handelt sich hierbei um 3000-4000 Einträge. Wäre es hier besser einen Algorithmus wie Sounders zu implementieren oder die Datei von Hand zu bearbeiten?

Gruss
dschmoegner

05.09.2006 - 12:31 Uhr

Ob das mit dem teilen hinhaut bei einer Datenanbindung an ein DataSet? Das ginge ja dann höchstens Blockweise oder? Wobei ich ja dann wieder mit Schleifen arbeiten müsste die wiederum Zeit kosten. Oder bin ich da falsch?

Bei dem Virtuellen Mode wird ja ein Datencache verlangt. Kann ich eventuell das DataSet als Datencache ansehen?

Gruss
dschmoegner

05.09.2006 - 11:52 Uhr

Hi Leute,

ich würde gerne in einer ProgressBar den Fortschritt vom Laden einer Datei bis zum Eintragen der gewonnen Daten in ein DataGridView anzeigen lassen. Es handelt sich hierbei um ca. 3000 Einträge. Für mich stellt es sich im Moment so dar, dass sobald das GridView die Daten übernimmt die ProgressBar nicht mehr aktualisiert wird. Die ProgressBar wird über den Forms.Timer gesteuert. Die aktualisierung des DataGridViews kann ich ja nicht in einen Thread auslagern wegen dem gesperrten Zugriff auf die Steuerelemente. Beim BackgroundWorker bekam ich auch diese Meldung.

Meine Software besteht aus mehreren TabPages auf denen DataGridViews angebracht sind, so dass ich immer abprüfe auf welcher TabPage ich mich grad befinde und dabei wirft mir der Debugger den Fehler:

Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement tabControl1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

Da der BackgroundWorker doch intern Invoke usw. verwenden soll hatte ich gehofft den Zugriff auf die Steuerelemente so regeln zu können.

Gruss
dschmoegner

24.08.2006 - 10:01 Uhr

Hi,

die zuerst verwendete Lösung erwies sich als stark mangelhaft. Bei einem Dateiinhalt wie diesem:

"206433         ","KABELBESCHRIF. HELAGRIP 2000            ","516-02624           ","1                   ","1400"
"206434         ","KUGELN F. STRAWS 7/64"                  ","                    ","2,3                 ","1299"
"206435         ","BUCHSE, EINBAU 4MM BLAU                 ","25 F 140            ","3,1                 ","1400"

versagt mein Regex.

Mit diesem Regex, welchen ich mit Hilfe von herbivores Tool entwickelt habe, komme ich da schon viel weiter.

(\s*)(\s*)(\")(,)(\")(\s*)(\s*)

Allerdings bekomme ich ihn nicht in Code übersetzt da mir die Anführungszeichen nen Strich durch die Rechnung machen.

Weder dieses:

 Regex splitter = new Regex(@"\s*\s*\",\"\s*\s*", RegexOptions.Compiled);

noch dieses:

Regex splitter = new Regex(@"\s*\s*\\",\\"\s*\s*", RegexOptions.Compiled);

wird akzeptiert.

Bitte helft mir auf die Sprünge. Wie schaffe ich es das die Anführungszeichen nicht vom String behandelt werden? Was übersehe ich?

dschmoegner

26.07.2006 - 10:45 Uhr

Original von FZelle
Zu 1.
dgv.AutoGenerateColumns = false;

zu 2.
dgv.Columns_.Index

Die Welt kann manchmal so einfach sein. Sich dat Brett vorm Kopf zu entfernen versucht =)

26.07.2006 - 10:06 Uhr

Ich entschuldige mich. Bin es immernoch gewohnt die installierte MSDN vom VS 03 zu verwenden, oder besser gesagt ich verwende sie manchmal noch aus Gewohnheit.

Wenn es dich nicht stört würde ich die Columnsauflistung aus dem DataGridView herausnehmen. Durch das Binding werden die Columns aus dem DataSet ja eh in die DataGridView übernommen.

gruss
dschmoegner

26.07.2006 - 09:25 Uhr

Moin,

unter .NET 1.1 habe ich das erste Problem mit Hilfe der DataGridTableStyle Klasse gelöst.

DataGridTextBoxColumn ColumnIndex =	new DataGridTextBoxColumn();
ColumnIndex.MappingName =	     "Nr.";
ColumnIndex.HeaderText =	"Nr.";
ColumnIndex.Width =	(int)grfx.MeasureString("Nr.i13", this.MeasChartDataGrid.Font).Width-1;

DGStyle.MappingName = "DT"; //DT war der TableName der DataTable
DGStyle.GridColumnStyles.Add(ColumnIndex);
DGStyle.DataGrid = this.MeasChartDataGrid;
			
//Spaltendesign und DataTable als Quelle an das DataGrid binden
this.MeasChartDataGrid.TableStyles.Add(DGStyle);
this.MeasChartDataGrid.SetDataBinding(myDT,"");
this.MeasChartDataGrid.EndInit();

MappingName und HeaderText der DataGridTextBoxColumn entsprachen dabei genau dem Namen der Columns in meinem DataTable.

Hoffe dir hilft das weiter.

Zum zweiten Problem kann ich keine Auskunft geben.

gruss
dschmoegner

25.07.2006 - 08:50 Uhr

Moin,

aus der MSDN

OpenFileDialog.InitialDirectory

Ruft das Ausgangsverzeichnis ab, das im Dateidialogfeld angezeigt wird, oder legt dieses fest.

gruss
dschmoegner

20.07.2006 - 09:01 Uhr

Versteh ich net so ganz. Bei meinem VS2005 Express ist die Eigenschaft Borderstyle für die Tabpage verfügbar. Für TabControl ist meiner Meinung nach so eine Eigenschaft ja auch nicht von Nöten.

this.tabPage1.BorderStyle = BorderStyle.None;

Für den WindowsXP Look einer Anwendung musst du

Application.EnableVisualStyles();

verwenden.

gruss
dschmoegner

17.07.2006 - 16:15 Uhr

Also nochmals Danke für eure Mühen, aber irgendwie scheiter ich an diesem Pattern. 🙁

Wie dem auch sein, die oben beschriebene Variante führt ja auch zu einem akzeptablen Ergebnis und Speicher is ja zum Glück heutzutage nimmer so ein Problem. 🙂

gruss
dschmoegner

16.07.2006 - 12:18 Uhr

Hi mipper,

danke für die Antwort. Also der String den ich aus der Datei gewinne liegt dann so

"\"201001         \",\"WID NULL OHM                            \",\"17 E 500            \",\"1                   \",\"1400\"\r\n"

im Programm vor. Mit diesen Zeichen. Wo die herkamen hat mich zwars auch gewundert aber sie sind nun mal da. Die Datei zum einlesen liegt im txt-Format vor. Eine cvs Datei soll es bei einem Export der Daten entstehen.

gruss
dschmoegner

14.07.2006 - 10:20 Uhr

Also doch so einfach. Danke fürs geraderücken der Gedanken.

gruss
dschmoegner

14.07.2006 - 09:44 Uhr

Moin,

da ich seid geraumer Zeit Interfaces sehr häufig und auch gerne verwende, wollte ich mich nochmals tiefer einarbeiten. Dabei bin ich an der expliziten Implementierung, die ich bisher nicht verwendet hab, hängengeblieben.

namespace Interfaces
{
    class Program: IInterface, ISecondInterface
    {      

        #region IInterface Member

        string IInterface.Method()
        {
            return ("Interfacemethode explizit implementiert");
        }

        #endregion

        #region ISecondInterface Member

        public string MethodTwo()
        {
            return ("Interfacemethode implementiert");
        }

        #endregion
    }
}

Interface Methode sind doch standardmässig public. Bei der expliziten Implementierung verliert die Methode jedoch das Keyword. Für mich sieht die Methode nun eher wie eine static Methode aus. Oder gebe ich bei der expliziten Variante einfach nur direkt an woher die Methode stammt? Ergeben sich daraus Vorteile?

gruss
dschmoegner

12.07.2006 - 14:23 Uhr

Hi Community,

ich versuche einen String (Inhalt einer Datei) mit Regex zu filtern. Eine Zeile des Strings sieht so aus:

"\"201001         \",\"WID NULL OHM                            \",\"17 E 500            \",\"1                   \",\"1400\"\r\n"

Als Regex hatte ich mir folgendes gebaut:

  Regex splitter = new Regex("[\"][\\]\\s*,[\"][\\]\\s*", RegexOptions.Compiled);

Erreichen will ich damit, dass nur die Inhalte zwischen den Anführungszeichen und zwischen den Kommas herausgefiltert werden.

Beim Ausführen bekomme ich nun eine ArgumentException mit diesem Text:

"["][\]\s*,["][\]\s*" wird analysiert - Nicht abgeschlossener []-Satz.

Is es überhaupt möglich meinen String so zu filtern oder muss ich mit diesem Regex leben:

Regex splitter = new Regex("\\s*\"\\s*", RegexOptions.Compiled);

Bei diesem Regex bekomme ich natürlich das Komma mitgefiltert. In der Arraybearbeitung könnt ich das natürlich überspringen, aber mein Ehrgeiz liess mir keine Ruhe. Vielleicht könnt ihr mich auf die richtige Fährte bringen oder ihr sagt mir, dass es so nicht geht.

Gruss
dschmoegner

09.06.2006 - 12:11 Uhr

Hi,

könnte es sein, dass ein anderes Programm diesen Port blockiert/verwendet????

02.06.2006 - 09:03 Uhr

Also NamedPipes sind wirklich nicht ohne. Zum Glück gibts auf pinvoke.net sogar nen Code-Beispiel.

Ich hoffe jedoch die Leutz bei mir inner Firma doch noch von VS 2005 überzeugen zu können g.

Gruss
dschmoegner

29.05.2006 - 15:37 Uhr

Original von herbivore
Hallo dschmoegner,

Da ja ein Port dafür verwendet wird, kann es sein, dass sich dann eventuell auf dem Zielrechnern installierte Firewalls melden?
nur wenn auf dem lokalen Rechner auch eine Firewall installiert bzw. aktiviert ist. Wenn das der Fall ist, ist allerdings davon auszugehen, dass sie sich meldet oder sogar ungefragt den Zugriff verhindert.

herbivore

Das war genau die Antwort die ich geahnt hatte. Dann scheint es mir so, dass ich dein Beispiel als Lösung verwerfen müsste. Mir ist da noch eine Idee gekommen. Wenn es möglich wäre die Logindaten sicher zu löschen, dann könnte ich doch beim Start der 2. Instanz die vorhergehende beenden. Aus einer Datei oder dem Speicher 🤔 die Daten übernehmen und somit einen Login vorm User verbergen. Oder wäre dies sehr unsaubere Arbeit?

dschmoegner

29.05.2006 - 15:27 Uhr

Danke herbivore,

eines ist mir beim lesen des Codes eingefallen. Da ja ein Port dafür verwendet wird, kann es sein, dass sich dann eventuell auf dem Zielrechnern installierte Firewalls melden? Ich frage darum, weil eher davon auszugehen ist, dass meine Anwendung bei Kunden laufen wird die keinen Systemadministrator beschäftigen und davon die wenigsten wirkliche Ahnung von Firewalls haben. Leider kann ich nicht auf .NET 2 umstellen.

Gruss
dschmoegner

29.05.2006 - 15:00 Uhr

Hi,

folgendes Problem stellt sich mir dar. Ich habe meine Anwendung welche mit einem Login versehen ist. Dieser Anwendung hab ich den von ihr verwendeten Dateityp zugeordnet. Wenn diese Datei doppelt angeklickt werden wird meine Anwendung gestartet und lädt die entsprechende Datei.

Nun suche ich nach einer Möglichkeit, dass durch erneuten Doppelklick auf eine Datei, deren Inhalt in die bereits existierende Instanz zu laden und nicht eine neue Instanz zu starten. Ich möchte dabei einfach nur einen weiteren Login vermeiden, was meiner Meinung nach den Programmcomfort stark beeinträchtigt.

Mit GetCurrentProcess und GetProcessByName komm ich ja an die jeweiligen Processe heran nur sehe ich da keine Methode für mein Problem. Bei der Methode Process.Refresh bin ich mir auch nicht sicher ob ich damit die ÜBergabeparameter der exe-Datei neu laden kann.

Schon mal danke.

Gruss
dschmoegner

23.05.2006 - 08:38 Uhr

Jo, des war ja nur auf die schnelle für den Test. Da pass ich drauf auf, nachdem ich damit schon ein paar mal in die Falle getappt bin. 🙂

22.05.2006 - 16:38 Uhr

Danke Herbivore, dein Hinweis hat mich auf die Idee gebracht, das ganze ohne den Designer zu probieren. Mit dieser Zeile im Load Event funktioniert es.

this.Icon = new System.Drawing.Icon(@"C:\Dokumente und Einstellungen\Schmökner\Eigene Dateien\Visual Studio Projects\MeasureLog InControl 1050\MDI\Icon1.ico");

Warum das so funktioniert aber nicht mit dem Eigenschaftsdialog erschliesst sich mir aber immernoch nicht.

Dank euch.

MfG
dschmoegner

22.05.2006 - 16:19 Uhr

@frisch leider dasselbe

@herbivore hab das icon über den Eigenschaftendialog festgelegt. Sollte ich es mit einem absoluten Pfad probieren?

22.05.2006 - 15:47 Uhr

Hi,

mir stellt sich folgendes Problem dar. Wenn ich meiner Applikation ein Icon verpassen möchte, dann bekomme ich diese Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 'System.Resources.MissingManifestResourceException' ist in mscorlib.dll aufgetreten.

Zusätzliche Informationen: Für die angegebene Kultur (oder die neutrale Kultur) in der Assembly konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass 'MainWindow.resources' richtig in die Assembly 'VisualInControl' eingebettet wurde.
baseName: MainWindow  locationInfo: Visual_InControl.MainWindow  resource file name: MainWindow.resources  assembly: VisualInControl, Version=1.0.2333.26483, Culture=neutral, PublicKeyToken=null

mit dem Verweis auf die Codezeile

this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

So richtig kann ich mir das nicht erklären. Habe den Verdacht, dass es mit dem experimentieren bei Localizable zu tun hat. Die resx Datei für die Form existiert und Localizable ist auf False eingestellt.

Wahrscheinlich blamier ich mich total mit der Frage, aber ich seh absolut den Wald vor lauter Bäume net.

Danke.
MfG
dschmoegner

28.04.2006 - 09:19 Uhr

Moin,

da bin ich überfragt, meiner Meinung nach sollte der Code jedes Control drucken können.

27.04.2006 - 15:59 Uhr

Danke FZelle,

ich brauchs zwars nimmer, aber vielleicht sollte man dieses Thema in die Artikel oder Tutorial-Ecke aufnehmen. Kommt ja anscheinend doch immer mal wieder vor.

Gruss
dschmoegner

27.04.2006 - 13:30 Uhr

Was mir grad einfällt, das Beispiel ist ohne weiteres auf 2 Controls erweiterbar. Hier mal meine Erweiterung:

public void Print2Control(Control pCtrl, Control pSecCtrl)
		{
			//weil wir eine Variable auf Klassenebene verändern 
			//gegen andere Threads blocken
			lock(this)
			{
				//Quellobjekte für den Kopiervorgang erstellen
				Graphics gSource=Graphics.FromHwnd(pCtrl.Handle);
				Rectangle rectSource=pCtrl.ClientRectangle;
				_ImageToPrint=new Bitmap(rectSource.Width,rectSource.Height,gSource);

				//Quellobjekte des 2. Controls für den Kopiervorgang erstellen
				Graphics gSecSource=Graphics.FromHwnd(pSecCtrl.Handle);
				Rectangle rectSecSource=pSecCtrl.ClientRectangle;
				_SecImageToPrint=new Bitmap(rectSecSource.Width,rectSecSource.Height,gSecSource);

				//Source hdc erstellen
				IntPtr hdcSource=gSource.GetHdc();

				//SecSource hdc erstellen
				IntPtr hdcSecSource=gSecSource.GetHdc();

				//Zielobjekte für den Kopiervorgang erstellen
				Graphics gTarget=Graphics.FromImage(_ImageToPrint);
				IntPtr hdcTarget=gTarget.GetHdc();

				//SecZielobjekte für den Kopiervorgang erstellen
				Graphics gSecTarget=Graphics.FromImage(_SecImageToPrint);
				IntPtr hdcSecTarget=gSecTarget.GetHdc();


				//per BitBlt das Image vom hdcSource auf hdcTarget kopieren
				BitBlt(hdcTarget,0,0,rectSource.Width,rectSource.Height,hdcSource,0,0,SRCCOPY);

				//per BitBlt das SecImage vom hdcSource auf hdcTarget kopieren
				BitBlt(hdcSecTarget,0,0,rectSecSource.Width,rectSecSource.Height,hdcSecSource,0,0,SRCCOPY);

				//verwendete objekte freigeben
				gSource.ReleaseHdc(hdcSource);
				gTarget.ReleaseHdc(hdcTarget);

				//verwendete secobjekte freigeben
				gSecSource.ReleaseHdc(hdcSecSource);
				gSecTarget.ReleaseHdc(hdcSecTarget);

				
			}
		}

Im Grunde ja nichts anderes wie der Code von Programmierhans.

27.04.2006 - 13:24 Uhr

Hmm,

übergeb doch anstatt eines Controls die gesammte Form. Das war die Idee die hinter meinem Post steckte. Wenn das nicht in Frage kommt, hilft wohl nur noch ein Bild deines Barcodes zu erzeugen und dieses Dann an den Drucker zu senden.

Gruss
dschmoegner

27.04.2006 - 13:08 Uhr

Hi,

mit Hilfe der SuFu 😉

Drucken eines Controls

Sollte auch auf dein Problem anwendbar sein.

Gruss