Laden...

Forenbeiträge von hurricane Ingesamt 379 Beiträge

17.11.2005 - 09:52 Uhr

Hallo, wir haben einen eigenen Server bei Webjanssen. Wir sind soweit recht zufrieden, bei Problemen ist der Support immer sehr hilfreich und engagiert.

Zu Preisen kann ich jetzt nicht so viel sagen, da wird halt nen Server haben mit mehreren Domains weiß ich jetzt nicht was eine Domain kostet, müßte man halt nachschauen.

ciao Anke

16.11.2005 - 09:27 Uhr

Soweit ich verstanden habe, kann man mit dem Bootstrapper auch andere Setups einbinden wie z.B. MDAC. Dazu gibt es ja auch eine Anleitung bei Microsoft.

15.11.2005 - 14:24 Uhr

Ich denke svenson hat Recht. Wenn Windows versucht deine Applikation zu beenden, dann wird sichlich auch das OnClosing-Event geworfen und da du ja verhinderst das das Programm beendet wird, kann auch Windows nicht herunterfahren...

ciao Anke

15.11.2005 - 14:15 Uhr

Such mal bei Microsoft nach Boostrapper

Da kannst du prüfen ob ein Programm z.B. Direct X oder so auf dem PC installiert ist und wenn dies nicht der Fall ist wird es automatisch installiert... Dazu muss man dann die setup.exe starten, nicht sie setup.msi sonst klappt das nicht...

Hatte so ein Problem letzte Woche selber 😉 ich wollte halt automatisch die Installation zum Frameworl starten wenn dies nicht installiert ist und danach meine Software installieren...

15.11.2005 - 09:00 Uhr

Du könntest entweder das Bild in der PictureBox ein paar Pixel kleiner machen als die eigentliche PictureBox und zentriert setzen und dabei halt eine BackColor angeben (Achtung, das Bild muss dann immer gleich groß sein!)

oder du erstellst dir z.B. ein UserControl in das du eine PictureBox legst, die halt ein parr Pixel kleiner ist als das Control. Als Eigenschaft gibst du dann die BackColor der Usercontrols, das Image-Attribut der PictureBox und was du halt noch so brauchst 😉

Ich hoffe das war jetzt eingermaßen verständlich...

ciao Anke

14.11.2005 - 10:25 Uhr

Ich wäre auch dafür, und myCSHARP.de soll ruhig auch was abbekommen. Uns es darf ruhig auch "Girlie-Shirts" geben 😁

Ich habe da: http://de.personello.com/ für meine Cousine ein T-Shirt zu Weihnachten machen lassen und es ist echt super geworden 😉

Vie´lleicht gibt es ja Rabatt wenn man mehrere nimmt 😉

10.11.2005 - 14:21 Uhr

@Altstetter: Liest du wirklich Readme-Dateien bevor du etwas installierst??? Ich lese die ja nicht mal hinterher 🤔

Ich habe schon überlegt ob man die MSI-Datei nicht einfach verstecken kann, so das der Anwender die im Normalfall gar nicht sieht. Ich befürchte nämlich nur das der Anwender einfach auf Setup klickt und nocht auf die Endung der Datei schaut...

natürlich kann ich einen Autostart einbauen, aber manchmal bricht man den auch ab und startet direkt von er CD (wer weiß schon was der User so denkt)

ciao Anke

10.11.2005 - 14:15 Uhr

Danke für deine Hilfe SimonKnight6600. Mal sehen was ich mache, es ist erst mal nicht ganz so dringend, weil die Setup-Datei erstmal nur für Testzwecke generiert wird.

Doof finde ich auch, das man nicht eine Meldung bekommt a la "Um XYZ installieren zu können, benötigen Siedas .NET Framework, nöchten Sie das jetzt installieren?

Der User muß sich doch wundern warum das Framework installiert wird, wenn er doch mein Programm XYZ installieren will!

ciao Anke

10.11.2005 - 11:27 Uhr

Hallo Forum,

Ich muss eine Installationsroutine erstellen und will dabei prüfen ob das .NET Framework bereits installiert ist.
Ich habe nun herausgefunden das ich dazu den Bootstrapper verwenden kann. Ich habe dazu auch etwas im Forum gefunden aber so richtig kapieren tu ich das ganze Prozedere noch nicht...

Ich habe den Bootstrapper installiert und für mein Projekt eingerichtet. Wenn ich nun die Setup.exe starte prüft er ob das .NET Framework installiert ist, ist dies nicht der Fall, wird dieses installiert. Danach wird auch das Sprachpaket installiert (wenn der User das möchte).
Zu guter letzt folgt dann die Installation meines eigentlichen Programms.

nun mein Problem:

Was ist wenn der Anwender die setup.msi-Datei startet? Dann prüft er zwar auch ob das .NET Framework installiert ist und ich habe es sogar hinbekommen das er es installiert falls es nicht da ist, aber danach installiert er mir mein eigentliches Programm nicht!
Der Anwender muß also noch einmal die Datei setup.msi starten und das kann ja nicht ganz der Sinn sein...

Hat jemand eine Lösung für mein Problem? Wäre echt super 😉 da ich trotz googeln und Co noch nicht wirklich eine Lösung gefunden habe.

ciao Anke

08.11.2005 - 15:23 Uhr

shcau doch mal bei Codeprojects.com

ansonsten z.B.:

http://www.genne-develop.com/

28.10.2005 - 14:06 Uhr

Springt er denn überhaupt in deine Methode? Und wenn ja, lass dir doch mal den KeyCode ausgeben...

26.10.2005 - 09:43 Uhr

Da du ja schon von Lutz Roeder den .NET Reflector nutzt, solltest du dir auch mal "CommandBar for .NET" anschauen (http://www.aisto.com/roeder/dotnet/)

In der ZIP-Datei die du dort runterladen kannst, gibt es eine Datei namens HelloWorld.cs, die eine Klasse Images besitzt, diese sieht wie folgt aus (Code ist von "CommandBar for .NET")


private class Images
{
	private static Image[] images = null;

	// ImageList.Images[int index] does not preserve alpha channel.
	static Images()
	{
		// TODO alpha channel PNG loader is not working on .NET Service RC1
		Bitmap bitmap = new Bitmap("ImageList16.png");
		int count = (int) (bitmap.Width / bitmap.Height);
		images = new Image[count];
		Rectangle rectangle = new Rectangle(0, 0, bitmap.Height, bitmap.Height);
		for (int i = 0; i < count; i++)
		{
			images[i] = bitmap.Clone(rectangle, bitmap.PixelFormat);
			rectangle.X += bitmap.Height;
		}
	}	
	
	public static Image New               { get { return images[0];  } }
	public static Image Open              { get { return images[1];  } }
	public static Image Save              { get { return images[2];  } }
	public static Image Cut               { get { return images[3];  } }
	public static Image Copy              { get { return images[4];  } }
	public static Image Paste             { get { return images[5];  } }
	public static Image Delete            { get { return images[6];  } }
	public static Image Properties        { get { return images[7];  } }
	public static Image Undo              { get { return images[8];  } }
	public static Image Redo              { get { return images[9];  } }
	public static Image Preview           { get { return images[10]; } }
	public static Image Print             { get { return images[11]; } }
	public static Image Search            { get { return images[12]; } }
	public static Image ReSearch          { get { return images[13]; } }
	public static Image Help              { get { return images[14]; } }
	public static Image ZoomIn            { get { return images[15]; } }
	public static Image ZoomOut           { get { return images[16]; } }
	public static Image Back              { get { return images[17]; } }
	public static Image Forward           { get { return images[18]; } }
	public static Image Favorites         { get { return images[19]; } }
	public static Image AddToFavorites    { get { return images[20]; } }
	public static Image Stop              { get { return images[21]; } }
	public static Image Refresh           { get { return images[22]; } }
	public static Image Home              { get { return images[23]; } }
	public static Image Edit              { get { return images[24]; } }
	public static Image Tools             { get { return images[25]; } }
	public static Image Tiles             { get { return images[26]; } }
	public static Image Icons             { get { return images[27]; } }
	public static Image List              { get { return images[28]; } }
	public static Image Details           { get { return images[29]; } }
	public static Image Pane              { get { return images[30]; } }
	public static Image Culture           { get { return images[31]; } }
	public static Image Languages         { get { return images[32]; } }
	public static Image History           { get { return images[33]; } }
	public static Image Mail              { get { return images[34]; } }
	public static Image Parent            { get { return images[35]; } }
	public static Image FolderProperties  { get { return images[36]; } }
}

Im Grunde genommen, schneidet diese Klasse, also lediglich die einzelnen "Icons" aus...

Ich hoffe das ich dir helfen konnte,

ciao Anke

26.10.2005 - 08:54 Uhr

Du kannst den Zeileninhalt Splitten, verwende dazu einfach die Split-Methode (String). Näheres findest du in der Doku 😉

ciao Anke

25.10.2005 - 09:08 Uhr

Das geht mit Server.HtmlEncode(string) oder so in der Art. Mußt du mal nach suchen, aber so in etwa ist der Befehle 😉

ciao Anke

24.10.2005 - 13:20 Uhr

enum Key
{
    /// <summary>
    /// Der Key1 hat den Wert 0.
    /// </summary>
    Key1 = 0,
    /// <summary>
    /// Der Key2 hat den Wert 1.
    /// </summary>
    Key2 = 1
} 

Als Parameter übergibst du dann auch den Enum, also z.B.


Key key = Key.Key1;

SetKey(Key k)
{
   this.key = k;
}

Wenn du überprüfen willst, welcher Key übergeben wurde, kannst du dies folgendermaßen tun:


SetKey(Key k)
{
   if(k == Key.Key2)
   {
        // mach hier irgendwas...
   }
}


ciao Anke

21.10.2005 - 09:53 Uhr

hast du die ListView so eingestellt, das immer mehere Einträge nebeneinander stehen können (ähnlich wie im Windows-Explorer) und halt unter jedem Icon ein Text steht?

Du könntest die ListView auch so einstellen, das jeweis nur ein EIntrag pro Zeile ist, dann hast du jeweils links das Bild und rechts den Text, dann wären die Einträge immer gleich hoch, egal wie lang der Text ist...

ciao Anke

21.10.2005 - 08:03 Uhr

Du weiß doch der ListView eine ImageList zu und in der ImageList kannst du doch die Bildgröße festlgegen, oder nicht?

20.10.2005 - 11:45 Uhr

Du musst halt im Coe (nicht im Designer) Textboxen erstellen und sie dem Control hinzufügen...

Dabei musst du die Location halt jeweils um die Höhe der eben erstellten TextBox + Rand verschieben 😉

20.10.2005 - 11:43 Uhr

Also bei Mapinfo bekommst du auch deusche Karten 😉

20.10.2005 - 08:43 Uhr

Man könnte es beispielsweise auch so schreiben (ungetestet):


DataRowView drv = (DataRowView)bs.Current;

int BelegID = Convert.ToInt32(drv["BelegID"]); 

Ist das verständlicher für dich

19.10.2005 - 16:13 Uhr

dann hab ich wohl nicht alles richtig gelesen...

Soll also so sein wie in Excel... (z.B.)

Hmm, ja das ist etwas schwieriger... da weiß ich so spontan auch nichts... das ist ja auch schwierig weil die Breite ja je nach Text unterschiedlich groß ist...

19.10.2005 - 15:46 Uhr

Vielleicht habe ich dich ja falsch verstanden, aber warum machst du das nicht einfach folgendermaßen ???


private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
	(((TabControl)sender).SelectedTab).Text = "123";
}

19.10.2005 - 15:34 Uhr

Genau das gleich hatte ich auch letztens, echt blöd das ganze...

hiermit umgesht du das:

System.Text.Encoding.GetEncoding("ISO-8859-1")
19.10.2005 - 15:10 Uhr

Dazu mußt du Encoding verwenden 😉

public StreamReader(string, Encoding);

Initialisiert eine neue Instanz der StreamReader-Klasse für den angegebenen Stream mit der angegebenen Zeichencodierung und der Option für die Erkennung der Markierung für die Bytereihenfolge.

19.10.2005 - 14:40 Uhr

Mach es doch einfach mal so:
du liest einfach deine Daten aus und schreibst diese nacheinander in die Textbox.

also so:


// Schleife (foreach oder so, mit denen du deine Daten durchläufst).
foreach(string file in ...)
{
     this.tbx.Append(file + Environment.NewLine);
}

Das sollte dann so funktionieren...

ciao Anke

19.10.2005 - 09:05 Uhr

Das geht ganz einfach 😉


/// <summary>
/// Tritt ein, wenn auf einen Spaltenkopf der ListView geklickt wird.
/// Es wird die jeweilige Spalte sortiert, auf die geklickt wurde.
/// </summary>
/// <param name="sender">System value</param>
/// <param name="e">System value</param>
private void listViewStrategies_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
	// überprüft ob diese Spalte bereits sortiert ist
	if ( this.lvColumnSorter.CurrentColumn == e.Column)
	{
		// wenn ja, wird überprüft ob diese Spalte Aufsteigend sortiert ist
		if ( this.lvColumnSorter.Sort == SortOrder.Ascending)
		{
			// wenn ja, wird die Spalte nun absteigend sortiert
			this.lvColumnSorter.Sort = SortOrder.Descending;
		}
		else
		{
			// wenn nicht, wird die nun aufsteigend sortiert
			this.lvColumnSorter.Sort = SortOrder.Ascending;
		}
	}
	// als zu sortierende Spalte wird die angeklickte vermerkt
	this.lvColumnSorter.CurrentColumn  = e.Column;

	// es wird sortiert...
	this.lvwStrategies.Sort();
}

Dabei ist lvColumnSorter eine Instanz meine ColumnSorters und lvwStrategies ist die entsprechende ListView 😉

ciao Anke

P.S. Ich habe da noch einen kleinen Tipp. Wenn du deine ListView akualiseren willst, bzw. wenn du mehrere Daten einfügen willst, dann entferne erst den ColumnSorter von der ListView - für dann die Daten ein und binde den ColumnSorter erneut an die ListView... er sortiert sond nämlich direkt beim einfügen und das dauert sehr lange!

19.10.2005 - 08:55 Uhr

Deswegen sollst du ja die "alten" Dateien in eine extra Archivtabelle legen und nicht alles in eine Tabelle machen...

Ansonsten könntest du zunächst einen Group By machen. Dann durchläufst du die Datensätze der ermittelten Dateien (Daten) und generierst einen SQL-Befehl der nach der jeweiligen Datei sucht.

Also für Dein Beispiel:

a.txt
a.txt
b.html
c.doc
a.txt
b.html
a.txt

erhälst du beim Group By:
a.txt
b.html
c.doc

Für dieses generierst du halt jeweils einen Befehl der nur den Datensatz mit dem höchten Datum zurück gibt...
Wenn du viele Daten in der DB hast, kann das jedoch ganz schön viel Zeit beanspruchen...

19.10.2005 - 08:45 Uhr

Hast du die Dateien, die du kopieren willst vielleicht geöffnet, bzw. könnten sie durch irgendwein Programm blockiert sein?

19.10.2005 - 08:32 Uhr

Du könntest dir auch selber einen "Autowert" erzeugen und beim Insert mit angeben.

Dazu ermlittelst du die höchste ID die es in der Datenbank gibt und addierst eins. Existiert noch keine ID nimmst du halt einfach die 1 ...

Wenn du die ID dann in dem Insert-Befehl mit übergibst trägt er sie einfach in die DB ein (trotz Autowert).

Das ist vielleicht besser, als hinterher anhand der Werte die ID zu ermitteln, oder?

Es gibt da noch die Möglichkeit mittels @Identity, aber da traten bei mir auch öfter Probleme auf...

19.10.2005 - 08:24 Uhr

Ich würde vielleicht eher eine Tabelle mit den aktuellen Dateien anlegen und eine Archivtabelle. In der Archivtabelle kannst du halt die ursprüngliche Version mit dem jeweiligen Datum speichern und in der Tabelle mit den aktuellen Daten kommt jeweils die neuste Version rein, da solltest du dann auch noch das Datum dazu speichern.

Beispiel:

Folgende Daten stehen in deiner Tabelle mit den aktuellen Daten.

Tabelle aktuell
ID - Datei - Datum
1 - a.txt - 17.10.2005 16:00:00
2 - b.txt - 16.10.2005 13:30:00

Wenn du nun beispielsweise die Datei b.txt änderst, die ja die ID 2 hat dann trägst du das was in der "Tabelle aktuell" drin steht ins Archiv, also

Tabelle Archiv
ID - Datei - Datum
2 - b.txt - 16.10.2005 13:30:00

Und die neue geänderte Datei trägst du halt in die Tabelle aktuell, die dann wie folgt aussieht:

Tabelle aktuell
ID - Datei - Datum
1 - a.txt - 17.10.2005 16:00:00
2 - b.txt - 18.10.2005 08:23:00

Das wäre dann wesentlich übersichtlicher denke ich.

In der Archivtabelle dürfte natürlich die ID kein Primärschlüssel sein, da die ID ja doppelt vorkommt, wenn die Datei mehrere Versionen besitzt. Aber das könnte man ja realisieren 😉

18.10.2005 - 08:58 Uhr

Hallo Maddinel,

Hmm, ich sehe da jetzt nicht so das Problem. Vielleicht habe ich dich ja auch falsch verstanden, aber warum liest du nicht die Texte aus der XML-Datei aus und füllst dann die Label mit den entsprechenden Texten:


this.lbl1.Text = text1;
this.lbl2.Text = text2;

Also so in der Art... wahrscheinlich hast du ja auch unterschiedlich viele Obst bzw. Gemüsesorten, also sollten die Label ja eventuell dynamisch erzeugt werden, oder du solltest halt ein entsprechendes Control zur Anzeige der Daten nehmen...

ciao Anke

18.10.2005 - 07:52 Uhr

Du könntest es auch folgendermaßen machen:


MyDS.Tables["Nachname"].Columns.Add("Name");

foreach(DataRow row in MyDS.Tables["Nachname"].Rows)
{
	row["Name"] = row["Nachname"] + ", " + row["Vorname"];
}

comboBox2.DataSource = MyDS.Tables["Nachname"];
comboBox2.DisplayMember = "Name";

Nur so als Idee...

ciao Anke

18.10.2005 - 07:37 Uhr

Hallo rockthecity,

könnte es vielleicht sein, das auf dem 2000er PC kein Framework installiert ist?

ciao Anke

14.10.2005 - 07:29 Uhr

Hallo Powerslave

Probier es mal mit IsPostBack in der Forumsuche 😉

Wieso willst du denn ein select-Element, du kannst doch eine DropDownList bequem mit Daten aus einer Datenbank füllen: siehe Ado.Net

14.10.2005 - 07:26 Uhr

Soweit ich weiß ist ein Group By auf eine DataTable nicht so ohne weiteres möglich, das müßtest du dir schon selber schreiben 😉

13.10.2005 - 14:44 Uhr

VoID: Ich glaube so habe ich es damals aus gelöst 😉

13.10.2005 - 14:05 Uhr

Ist bei mir wie gesagt schon eine halbe Ewigkeit her, wahrscheinlich schon 2 jahre...

Habe auch seit über einem Jahr keine Webanwendung gemacht.

Ich habe wohl bei diesem Control runat=server hinzugefügt und dann damit gearbeitet...

13.10.2005 - 13:57 Uhr

Hmm, als ich glaube ich habe sowas mal gemacht. Bei mir konnte der User bei sich lokal ein Bild aussuchen und hochladen, das war gar nicht weiter schwer. Ich habe den Code aber leider nicht mehr X(

13.10.2005 - 13:42 Uhr

Das geht mit nem HtmlControl aber ich weiß nicht mehr genau wie, bzw. wie das heißt... ich glaube irgendwas mit file... ist schon ne Weile her, seit ich meine letzte Webanwendug gemacht habe 😉

13.10.2005 - 13:40 Uhr

Setzte in deiner Form einfach MinimizeBox bzw. MaximizeBox auf false, wenn die Schaltflächen gar nicht dargestellt werden soll...

ciao Anke

13.10.2005 - 12:51 Uhr

Du musst schon noch abfangen, ob an der aktuellen Stelle ein Item existiert. Das ganze müßte ungefähr so aussehen...


C#-Code: 
private void listView_Outward_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 
 {
    Point p = new Point(e.X, e.Y);
    Control c = listView_Outward.GetChildAtPoint(p);

    if(c != null)
    {
        Help.ShowPopup(c, c.Tag.ToString(), p);
    }
}

ciao Anke

13.10.2005 - 12:33 Uhr

wie wäre es mit ReadOnly = true 😉

13.10.2005 - 12:31 Uhr

Du kannst mit GetChildAtPoint(Point p) an das gewünschte Control kommen...

Ich hätte auch eine Idee wie du einen "ToolTip" anzeigen könntest. Ich habe mich gerade mit dem Thema Hilfe beschäftigt und da könnte dir folgendes helfen:

(GetChildAtPoint(Point p) -> damit ermittelst du dir das ListViewItem

Help.ShowPopup(this, "dies ist die Hilfe für dein ListViewItem", new Point(p)); -> damit zeigst du deine Hilfe (sozusagen ToolTip) an.

Ich weiß nur nicht mehr wie lange diese Hilfe angezeigt wurde... musst du halt mal probieren 😉

13.10.2005 - 07:53 Uhr

Also wenn du nur Karten vor einem bestimmten Umkreis willst, dann sollte es vielleicht nicht allzu teuer werden... zumindest wenn du die Karte einfach nur als Bild einbindest, wenn das programatisch werden soll, dann kostet das natürlich ne ganze Menge...

12.10.2005 - 13:02 Uhr

Musst du direkt in ein bestehenes (offenes) Dokument schreiben, oder musst du z.B. eine XLS-Datei erzeugen?

12.10.2005 - 12:51 Uhr

Oh Sorry, dann habe ich das wohl verwechselt... in einem anderen Thread war glaube ich noch ne Frage, wie man die Form unsichtbar macht (glaub ich 🤔 )

12.10.2005 - 12:44 Uhr

Fügst du den Text des Labels im Designer hinzu, also so wie du in deinem Codeschnipsel gemacht hast?

Änderst du vielleicht die Text-Align-Eigenchaft später noch einmal.

Fall du den Inhalt des Labels an anderer Stelle nochmal setzt (aus ner DB oder so) dann könnte es auch sein das du ein Leerzeichen hinter einem Text hast... dann könntest du ein Trim() auf diesen Text anwenden bevor die ihn einfügst...

Du kannst mir auch gerne mal die Form als Mail schicken, Adresse hast du ja 😉

ciao Anke

12.10.2005 - 11:47 Uhr

Ich auch...

Zeig dir doch mal den Rand der Lables an, vielleicht täuscht dich ja auch nur dein Auge 😉