Lass mal gut sein - der TO wollte wissen, wie er Email's verschlüsseln kann. Da er sich nicht mehr gemeldet hat, scheint das ja geklärt - der Rest ist Zeitverschwendung. Ich bin jedenfalls raus...
Schön, dass Ihr Euren Public Key auf Eurer Website veröffentlicht... inwiefern soll Dir das nützen beim Mailversand AN den Kunden? ;)
Das hab ich doch gar nicht geschrieben - meine Aussage bezieht sich auf den Sachverhalt, dass 'ID's' ausgetauscht werden müssen und dies als eine Art Hindernis dargestellt wird - ich wollte damit lediglich aufzeigen, dass dieser Prozess kaum eine ernsthafte Hürde sein kann...
Und zum Rest: Ich wollte lediglich darstellen, dass Abt IMHO viel zu stark pauschalisiert in seiner Aussage und dass es durchaus Branchen gibt, wo die Verschlüsselung der Kommunikation zwischen den Geschäftspartnern usus ist. Das von Dir angesprochene 'Schlüsselmanagement' ist letztendlich - was den Aufwand angeht - auch eine Frage der Routine und der eingesetzten Lösungen (bei uns zum Beispiel wird dafür nicht Outlook o.ä. eingesetzt, sondern eine spezielle Lösung die eben die Verwaltung der Schlüssel und den Prozess an sich stark vereinfacht).
Es ist aber müssig das hier zu diskutieren, weil es letztendlich immer von den Geschäftsfeldern und betrieblichen Abforderungen abhängt. Sensible Dinge per Briefpost zu verschicken ist nicht in jedem Fall möglich ;-)
Ich kenne ehrlich gesagt nicht ein Unternehmen, das so verschlüsselte Mails an Kunden verschickt.
Es macht im Kundenkontakt auch keinen Sinn, weil man erst mal die IDs austauschen muss - und das passiert im realen Leben so gut wie nie.
Naja, nur weil Du das nicht kennst, bedeutet das nicht, dass sowas nicht stattfindet - im Unternehmen, für das ich tätig bin ist das alltägliche Praxis. Man tauscht ja auch in der Regel keine 'IDs' aus, sondern stellt dem Kommunikationspartner seinen public key zur Verfügung (bei uns gibt es den als Download auf unserer Website).
Zitat von Abt
Normalerweise verschickt man eben aus diesen Gründen gar keine Passwörter, sondern der Kunde setzt sie auf der Seite direkt. ...
Keine Ahnung, wie Du jetzt auf Passwörter kommst - darum geht es doch hier überhaupt nicht...
@Brendan
Falls Du es noch nicht getan hast, würde ich mir an Deiner Stelle mal GPG4Win (https://www.gpg4win.de/) herunterladen und das ganze mit den Kunden mal ein bischen durchspielen. Vielleicht reicht es ja auch aus, Anhänge zu verschlüsseln, statt der ganzen Email. Hier würde sich dann OpenPGP anbieten, da gibt es mit BouncyCastle (https://www.bouncycastle.org/) eine sehr gute Bibliothek...
Verwende App_Code oder noch besser - lagere den Code in eine eigene Klassenbibliothek aus. Was Dir zum Thema App_Code Ordner erzählt wurde macht IMHO in Verbindung mit WebForms keinen Sinn.
Dann nutze die TAG-Eigenschaft der Controls. Dort kannst Du ein Objekt einer Klasse ablegen, die Deine zusätzlichen Eigenschaftenn implementiert...
public class AdvControlProperties
{
public double Factor { get; set; }
public bool Selected { get; set; }
}
...
Control newControl = new Label() { Tag = new AdvControlProperties() };
Verstehe ich richtig, dass Dein Problem ist, dass Du nicht genau weißt, wie Du statt Deiner 'Control'-Klasse Labels etc. hinzufügst, weil Dir nicht klar ist, wie Du Deine zusätzlichen Properties in diese Label etc. bekommst?
Da gibt es mehrere Ansätze: du könntest Ableitungen der Standard-Controls (Label etc.) erstellen und diese abgeleiteten Klassen verwenden oder die Tag-Eigenschaft der Standardklassen für Deine zusätzlichen Informationen nutzen...
Falls es darum nicht geht, spezifiziere bitte 'finde das ganze sehr unschön'...
'glandorf' schrieb ja bereits, dass Du auf die Daten des GridViews jederzeit zugreifen kannst (DataGridView.Rows, DataGridView.Row.Cells etc.). Allerdings solltest Du Dir auch das CellPainting-Ereignis mal genauer anschauen...
Ich kann Taipi88 hier nur beipflichten. Ich entwickle selbst eine sehr komplexe Anwendung, in der WaWi nur einen Teil ausmacht und verwende dafür ein TabbedUI auf Basis der DevExpress-Controls (https://www.devexpress.com/Products/NET/Controls/WinForms/Desktop_UI/). Für die Anwender ist es einfach ein Segen, wenn Sie z.B. mehrere Kunden, Belege oder Produkte parallel öffnen und vernünftig anordnen und verwalten können. Das können dann gern auch schon mal 40 - 50 'Fenster' sein, die da 'gleichzeitig' geöffnet sind...
Verschweigen darf man aber nicht, dass das Ganze schon einen gewissen Mehraufwand bedeutet, weil z.B. Daten zwischen den Fenstern ggf. synchronisiert werden müssen - hier muss man sich im Vorfeld Gedanken machen und sich eine vernünftige Basis schaffen - dann ist es allerdings IMHO sehr sehr benutzerfreundlich - gerade wenn man mehrere Monitore zur Verfügung hat...
Also in Zeiten von immer mehr 'Multi-Monitor'-Umgebungen sind MDI-Anwendungen wirklich überlebt und in meinen Augen - wurde ja schon mehrfach erwähnt - auch eine unnötige Gängelung der User. Ich sehe auch gar keinen Grund warum sich alle Fenster der Anwendung ebenfalls minimieren müssen, wenn ich das Hauptfenster minimiere - das überlasse ich dem Anwender. Aber wenn Du das unbedingt benötigst, hilft Dir z.B. die Auflistung Form.OwnedForms weiter. Über die kannst Du dann z.B. alle 'OnwnedForms' ebenfalls minimieren, wenn das Hauptfenster minimiert wird und ähnliches...
Alternativ dazu kannst Du mal nach dem Stichwort 'Docking' suchen... Es gibt zu diesem Thema zahlreiche Frameworks (DevComponents, DevExpress etc...).
Und wenn es denn MDI sein soll: bei DevExpress gibts eine Lösung, bei der die Skins der Kindfenster dem Elternfenster entsprechen (bzw. frei wählbar sind).
Die Datenquelle kommt zustande, indem der zuvor erstellte Report dem ReportViewer zugewiesen wird (in dem kleinen Popup mit der Überschrift Report Tasks - zu erreichen über einen Klick auf den kleinen Pfeil rechts oben am ReportViewer-Control). Und das hat bei Dir nicht geklappt?
> Alternativ soll es noch käufliche Controls geben, die aber in diesem Fall nicht in Frage kommen...
Warum eigentlich nicht - wozu das Rad immer wieder neu erfinden? Denkst du, Du bekommst das preiswerter hin?
Der letzte Parameter von DrawString ist ein Rectangle, dass den Bereich beschreibt, in dem gezeichnet wird. Diesen Bereich musst Du in der Schleife berechnen...
Noch ein Hinweis zum Zeichnen: du zeichnest innerhalb der Schleifen immer an die gleiche Stelle. Du musst zum Zeichnen des Labyrinths natürlich die Koordinaten an denen das Zeichen gezeichnet wird anpassen.
Du musst Deiner MyForm-Klasse in irgendeiner Form das Array übergeben. Deine Main-Methode hat da wo sie jetzt steht nichts zu suchen, die gehört in eine separate Klasse (i.d.R. Program(.cs)). Ausserdem fehlt in Deinem Code der NameSpace.
using System;
namespace MeineApp
{
public static class Program
{
public static void Main(string[] args)
{
int spalten, zeilen;
spalten = Int32.Parse(Console.ReadLine());
zeilen = Int32.Parse(Console.ReadLine());
char[,] labyrinth = new char[zeilen, spalten];
for (int i = 0; i < zeilen; i++)
{
for (int j = 0; j < spalten; j++)
{
labyrinth[i, j] = (char)Console.Read();
Console.Write(labyrinth[i, j]);
}
}
Application.Run(new MyForm() { Labyrinth = labyrinth });
}
}
}
using System.Windows.Forms;
using System.Drawing;
namespace MeineApp
{
public class MyForm : Form
{
public MyForm()
{
Text = "Labyrinth";
}
public char[] Labyrinth { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
// hier mit Deinen zwei for-Schleifen das zeichnen implementieren
for (int i = 0; i < Labyrinth.GetLength(0); i++)
{
for (int j = 0; j < Labyrinth.GetLength(1); j++)
{
// das eigentliche zeichnen...
}
}
//e.Graphics.DrawString("inhalt vom array soll gezeichnet werden", Font,
// new SolidBrush(Color.Black), ClientRectangle);
}
}
}
Ohne zu wissen, was und wie diese 'ServerAnwendung' genau macht, wird Dir hier wahrscheinlich keiner diese Fragen beantworten können.
Nur mal ganz grundsätzlich:
Ist die 'ServerAnwendung' ein Dienst? Wenn ja, kannst Du dort schon einiges einstellen, was passieren soll, wenn der Dienst 'abstürzt'. Ausserdem böte sich die Verwendung eines sog. WatchDogs an - ein zweiter Dienst, der nur nachschaut ob der erste bereits läuft und wenn nicht diesen startet. In einer perfekten Welt würde Dein ServerDienst dann auch noch den Watchdog überwachen, so dass beide sich gegenseitig ständig 'im Auge' haben...
Ist Deine ServerAnwendung kein Dienst, solltest Du das so handhaben, dass die Anwendung nur gestartet wird, wenn das abarbeiten notwendig ist - also starten, Aufgaben erledigen und danach wieder beenden. Müssen die Aufgaben regelmässig erledigt werden, kannst Du die ANwendung als geplanten Task starten (mit den Bordmitteln von Windows).
Wie kommt InitializeComponent() in die Methode ShowLineJoin - normalerweise wird diese im Constructor des Fensters aufgerufen?
Wo/wie wird ShowLineJoin aufgerufen?
Prinzipiell: Du musst Die Methode OnPaint überschreiben und/oder Dich an den Paint-Event des Fensters halten.
Um vielleicht auch mal eine sinnvolle Antwort zu liefern: Wenn Du den Button erst umbenennst und DANACH die Click-Methode generierst bekommt diese auch den passenden Namen. Ansonsten vllt. noch das Stichwort 'Refactoring' - wenn Du die Methode umbenennst wird der Name - wenn Du alles richtig machst - auch in der *.designer.cs angepasst...
was ich nicht hinbekomm ist: das man nur den gedrehten text sieht
Im überschriebenen OnPaint wird am Ende base.OnPaint aufgerufen. Damit wird die Standardzeichenroutine nach der Anzeige Deines eigenen Textes aufgerufen. Das ist falsch...
Zitat von Kaladial
geschweige denn das sich bei 90 oder 270 ° die größe des Labels anpasst
Das geschieht nicht automatisch, dass musst Du selbst umsetzen... (Stichwort: MeasureString)
Ich komm noch mal kurz zum Ausgangspunkt zurück. Hier meine Lösung zum Aufruf generischer Methoden mittels Type. Ich habe den Ursprungscode verwendet, DeineKlasse meint die Klasse, die GetWert enthält (im Beispielcode ja die gleiche, die ebenfalls Do enthält).
public string Do(Type t)
{
var methodinfo = typeof(DeineKlasse).GetMethod(nameof(DeineKlasse.GetWert));
var methodref = methodinfo.MakeGenericMethod(t);
dynamic wert = methodref.Invoke(this, null);
return wert.ToString();
}
Edit: Oh grad gesehen, das SirRufo eine Lösung mittels MakeGeneric bereits verlinkt hat - naja, spart sich ggf. eben einer das klicken auf den Link ;-)
@C4RLO, ob die UX für Dich passt: probiers doch einfach mal aus?!
Ehrlich gesagt kann ich sowas wie ein UI - abgesehen von der Commandozeile nicht finden. Kann sein, dass das Ergebnis besser/vergleichbar ist als/mit SharpDox und das sich das Ganze besser in VS integrieren lässt, aber da ich SharpDox nicht täglich brauche ziehe ich dessen verständliche UI DEUTLICH diesem docFX vor. Mit dem Ergebnis von SharpDox kann ich für meinen Bedarf sehr sehr gut leben und eine tiefere Integration in VS brauche ich nicht unbedingt...
Also ja, ich würde es begrüßen, wenn SharpDox am Leben erhalten wird... Viele Dank an Gaez, für dieses wirklich sehr hilfreiche udn nützliche Tool (kann man gar nicht oft genug sagen)!
Da die .NET-Runtime unter anderem auch den C# Compiler enthält, kannst Du Deine 'Scripte' auch komplett in C# schreiben. Schau Dir hierzu mal die Klasse CodeDomProvider und da insbesondere die Methode CompileAssemblyFromSource an...