@Finnegan
TOLL - das ist die Lösung, ich habe noch die Abfrage auf PageUp und PageDown ergänzen müssen. Right und Left spielt bei mir keine Rolle, kann aber nicht schaden
//=============================================
// Ausgabe von Tonsignal unterbinden
//=============================================
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
if (richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart) == 0 && e.KeyData == Keys.Up ||
richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart) == richTextBox1.GetLineFromCharIndex(richTextBox1.TextLength) && e.KeyData == Keys.Down ||
richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart) == 0 && e.KeyData == Keys.PageUp ||
richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart) == richTextBox1.GetLineFromCharIndex(richTextBox1.TextLength) && e.KeyData == Keys.PageDown ||
richTextBox1.SelectionStart == richTextBox1.TextLength && e.KeyData == Keys.Right ||
richTextBox1.SelectionStart == 0 && e.KeyData == Keys.Left
)
e.Handled = true;
} // richTextBox1_KeyDown
Es geht aber noch einfacher, wenn man diesen Warnton generell nicht haben will, dann kann man die IF-Abfrage weglassen.
//=============================================
// Ausgabe von Tonsignal unterbinden
//=============================================
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
Nochmals DANKE für diesen Hinweis.
@firefly
Link Text
Es geht ja auch etwas um das Anzeigefenster, die Mail-Adressen sind breiter, als die Telefonnummern.
Ich werde in die Überschrift SIP/URI/Mail-Adresse schreiben. Dann ist hoffentlich alles klar.
PS: Du bist ja auch ein Frühaufsteher.
Hello this is Gulshan Negi
Well, ensure that the file is saved as an XML file and not in a different format such as a text file or word document.
Hope it will work.
Thanks
Guten Morgen,
ich möchte jegliche Art von Daten (string/byte[]) speichern, und zwar so, dass diese mit in der dll kompiliert wird.
Meine Ist was grob folgendes (pseudo):
[MyRessourceAttribute(type: "xml")]
class MyResourceX
{
private string _base64Content =".......";
public string AsString() => BitConverter.ToString(Convert.FromBase64String(_base64Content ));
public byte[] AsBytes() => Convert.FromBase64String (_base64Content );
}
Die klass wird dann via roslyn o.ä. erstellt,
Nun frage ich mich hab ihr vll. ne bessere , performantere idee, daten driekt in ner assembly zuspeichern und abzurufen!?
Ich denke schon dass ich verstehe was du machen willst.
Nur nicht wieso du meinst da dynamic oder Casts zu brauchen.
Das Setzen der Werte wird wohl meist über Strings passieren - Kommandozeile, Configfile - das ist ja alles textbasiert. Und beim Lesen wirst du die Objekte ja nicht per Name nachschlagen müssen. D.h. dort kannst du direkt auf die abgeleitete Klasse zugreifen.
public interface IParameterBase
{
string Name { get; }
string Description { get; }
string DefaultValueString { get; }
string ValueString { get; set; }
void ResetToDefault();
}
public interface IParameter<T> : IParameterBase
{
T Value { get; set; }
}
public class IntParameter : IParameter<int>
{
public string Name { get; private set; }
public string Description { get; private set; }
public string DefaultValueString
{
get { return m_defaultValue.ToString(); }
}
public string ValueString
{
get { return m_value.ToString(); }
set { m_value = int.Parse(value); }
}
public int Value
{
get { return m_value; }
set { m_value = value; }
}
public IntParameter(string name, string description, int defaultValue)
{
Name = name;
Description = description;
m_defaultValue = defaultValue;
m_value = defaultValue;
}
public void ResetToDefault()
{
m_value = m_defaultValue;
}
private int m_defaultValue;
private int m_value;
}
public class StringParameter : IParameter<string>
{
public string Name { get; private set; }
public string Description { get; private set; }
public string DefaultValueString
{
get { return m_defaultValue; }
}
public string ValueString
{
get { return m_value; }
set { m_value = value; }
}
public string Value
{
get { return m_value; }
set { m_value = value; }
}
public StringParameter(string name, string description, string defaultValue)
{
Name = name;
Description = description;
m_defaultValue = defaultValue;
m_value = defaultValue;
}
public void ResetToDefault()
{
m_value = m_defaultValue;
}
private string m_defaultValue;
private string m_value;
}
public class MyParameters
{
public IntParameter FooCount { get; private set; }
public StringParameter BarPath { get; private set; }
public MyParameters()
{
FooCount = Add(new IntParameter("foo_count", "Initial number of foo instances", 3));
BarPath = Add(new StringParameter("bar", "Path of the bar directory", "C:\\Bar"));
}
public void SetValue(string name, string value)
{
m_parameters[name].ValueString = value;
}
// if necessary:
public IParameter<T> Get<T>(string name)
{
// yes, this is a cast, but only in one central place.
// and I don't think this function would be needed often - if at all.
return (IParameter<T>)m_parameters[name];
}
private T Add<T>(T p) where T : IParameterBase
{
m_parameters.Add(p.Name, p);
return p;
}
private readonly Dictionary<string, IParameterBase> m_parameters = new Dictionary<string, IParameterBase>();
}
class Usage
{
public static void Example(MyParameters param)
{
param.SetValue("foo_count", "123"); // use string API to set value from cmdline/config-file
int i = param.FooCount.Value; // get value by accessing object directly
}
}
Du musst für den Zugriff immer Deine Credentials angeben. Du musst eben nur auf ein anderes Konto Zugreifen.
Exchange regelt das, ob Du es darfst oder nicht.
@hustbaer sagte in Warum klappt Binary bei mir nicht:
spielt ja der File-Cache immer mit rei
Das habe ich mir ja auch gedacht, deshalb habe ich jeweils zweimal das Programm laufen lassen.
Beim Delphi-Programm war der zweite Lauf schneller (warmer Cache).
Beim C# Programm war er allerdings langsamer, als der erste ( überhitzter Cache ??? )
Die Klammern sind normale Block-Klammern, wie bei anderen Anweisungen auch (if, for, while), d.h. bei nur einer folgenden Anweisung können diese entfallen.
Ab C# 8 können sogar die using-Anweisungen ohne Verschachtelung geschrieben werden (und gelten dann bis zum Ende des Blocks, in dem sie sich selbst befinden): using-Deklaration (es entfallen zur Syntaxerkennung dann die runden Klammern).
using var file1 = new FileStream(fileName1, FileMode.Open);
using var file2 = new FileStream(fileName2, FileMode.Open);
// keine Blockklammern mehr nötig
@hkdd https://www.microsoft.com/en-us/wdsi/filesubmission/ hätte ich noch gefunden. Da sollte man sich entsprechend als "Home user" auch mit einem privaten Account anmelden können.
Virus Total gibt dir auch aus, welche Hersteller ein Virus melden. Bei denen kann man i.d.R. auch False Positives melden.
@hkdd sagte in DivRem in BigInteger nicht vorhanden:
Jetzt habe ich new entfernt, damit klappt es.
Hast du auch eine Frage? Ist die Frage warum das "new" da nicht hingehört?
Falls ja, "DivRem" ist eine statische Methode und keine innere Klasse von BigInteger.
@hkdd sagte in Wird bei DllImport die DLL-Datei pro Aufruf geladen ?:
@hustbaer sagte in Wird bei DllImport die DLL-Datei pro Aufruf geladen ?:
Ich würde empfehle das mit using zu machen
Ich mache doch am Ende in jedem Fall folgende Close-Aufrufe - ist das nicht identisch ?
fs1.Close();
fs2.Close();
Bei der Anwendung meines Programmes ist es ja so, dass zwar viele Dateien und Bytes verglichen werden, es dabei i.d.R. aber weder Lesefehler noch Differenzen gibt. (...)
Mir ist das im Prinzip Wurst wie du das machst Ich wollte dich nur darauf hinweisen dass man das üblicherweise in .NET halt nicht so macht. Sondern eben using verwendet. Weil es eben nicht identisch ist. Deine Close Aufrufe werden halt nur erreicht wenn keine Exception fliegt. Die using Blöcke machen die Files dagegen auch in dem Fall zuverlässig zu.
Damit ist diese Funktion nur für relativ kleine Dateien nutzbar.
Ich würde ein paar GB schon als relativ gross bezeichnen. Ist halt relativ
Hallo Zusammen,
da ich schlicht nicht weiß, unter welchen Stichwörtern ich suchen muss, könnte es ganz leicht sein, das diese Frage schon zig mal gestellt wurde, ich aber einfach nicht weiß wie ich danach suchen muss.
Für diesen Fall bitte ich vorsichtshalber schon einmal um Entschuldigung und hoffe, das ich nicht verbal "zerlegt" werde.
Frage: Ich habe eine laufende Anwendung (Avaya IX Workplace) und ich möchte den aktuell angezeigten Präsenzstatus auslesen. Über Visual Studio habe ich die Methode "Avaya.ClientServices.Presence" gefunden, die mir diese Information liefern müsste. Kann ich den Wert einer Methode eines laufenden Programms auslesen und evtl. auch verändern.
Bin für jeden Hinweis dankbar
VG
Rainer
@Mechanics sagte in Dictionary mit 2 (alternativ) Key:
Guter Punkt, hab nicht drauf geachtet.
Hab mal kurz gegoogelt, gab wohl schon paar Versuche, die in die Richtung gehen, schaut mir auf den ersten Blick aber sehr fragwürdig aus.
ja das dachte ich mir auch ,und ich dachte es gibt vll. ne elegantere lösung.. egal;)
Hallo
ich hoffe es kann mir jemand helfen
ich würde gerne einen Datensatz zu meiner Liste hinzufügen schaff es aber nicht.
ich öffne eine XMLDatei und befülle mein Formular mit einer treeView,
wenn ich dann auf die Grupppe klicke wird meine listView befüllt.
Wenn ich dann einen Eintrag in einen anderem Formular öffne, ändere und wieder schließe wird alles richtig aktualisiert.
wenn ich aber einen neuen Eintrag hinzufügen will funktioniert es bis zum anzeigen in der listView.
Leider wenn ich dann in der treeView die Grupppe wechsle und wieder auf die vorherige Gruppe zurück gehe ist der neue Eintrag weg.
Wie schaffe ich es das der neue Eintrag gespeichert wird.
namespace BaumarktVerwaltung
{
public partial class FormMain : Form
{
private Datei datei = null;
public FormMain()
{
InitializeComponent();
}
private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "XML Dateien|*.xml|Alle Dateien|*.*";
if (dialog.ShowDialog() == DialogResult.OK)
{
this.datei = Datei.Open(dialog.FileName);
this.datei.Save();
this.statusLabelCurrentFile.Text = dialog.FileName;
}
}
private void FormMain_Load(object sender, EventArgs e)
{
this.ShowItem();
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
listView1.Items.Clear();
if (e.Node.Level == 2)
{
List<Produkt> produkts = datei.AbteilungListe.Find(x => x.Warengruppe.Contains(e.Node.Parent.Text)).GruppenListe.Find(x => x.Kategorie.Contains(e.Node.Text)).ProduktListe;
foreach (Produkt produkt in produkts) this.ShowItem1(produkt);
}
}
private void ShowItem1(Produkt produkt)
{
ListViewItem item = new ListViewItem();
item.Tag = produkt;
item.Text = produkt.ProduktId;
item.SubItems.Add(produkt.ProduktBezeichnung);
item.SubItems.Add(produkt.Marke);
item.SubItems.Add(produkt.Groesse);
item.SubItems.Add(produkt.Anzahl);
item.SubItems.Add(produkt.Wert);
this.listView1.Items.Add(item);
if(produkt.Anzahl == "10") item.BackColor = Color.Red;
}
private void ShowItem()
{
string ProjectPath = Assembly.GetExecutingAssembly().Location;
string WorkPath = Path.GetDirectoryName(ProjectPath);
datei = Datei.Open(Path.Combine(WorkPath, "Waren.xml"));
TreeNode Root = new TreeNode("Abteilungen");
treeView1.Nodes.Clear();
foreach (Abteilung item in datei.AbteilungListe)
{
List<TreeNode> nodes = new List<TreeNode>();
foreach (Gruppe gruppe in item.GruppenListe)
{
nodes.Add(new TreeNode(gruppe.Kategorie));
}
TreeNode node = new TreeNode(item.Warengruppe, nodes.ToArray());
Root.Nodes.Add(node);
}
treeView1.Nodes.Add(Root);
treeView1.EndUpdate();
}
private void editAbteilungToolStripMenuItem_Click(object sender, EventArgs e)
{
FormAbteilungen abteilungForm = new FormAbteilungen();
if (abteilungForm.ShowDialog() == DialogResult.OK)
{
this.ShowItem();
}
}
private void MenuItemWarengruppen_Click(object sender, EventArgs e)
{
FormGruppen gruppenForm = new FormGruppen();
if (gruppenForm.ShowDialog() == DialogResult.OK)
{
this.ShowItem();
}
}
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
ListViewItem item = this.listView1.GetItemAt(e.X, e.Y);
Produkt produkt = (Produkt)item.Tag;
FormProdukt produktForm = new FormProdukt(produkt);
if (produktForm.ShowDialog() == DialogResult.OK)
{
item.SubItems[0].Text = produkt.ProduktId;
item.SubItems[1].Text = produkt.ProduktBezeichnung;
item.SubItems[2].Text = produkt.Marke;
item.SubItems[3].Text = produkt.Groesse;
item.SubItems[4].Text = produkt.Anzahl;
item.SubItems[5].Text = produkt.Wert;
}
}
private void MenuItemNew_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode.Level == 2)
{
FormProdukt produktForm = new FormProdukt();
if (produktForm.ShowDialog() == DialogResult.OK)
{
//if (treeView1.SelectedNode != null)
//{
//gruppe = (Gruppe)this.treeView1.SelectedNode.Tag;
//gruppe.ProduktListe.Clear();
//List<Produkt> produktse = datei.AbteilungListe.Find(x => x.Warengruppe.Contains(Abteilungsname)).GruppenListe.Find(x => x.Kategorie.Contains(Gruppenname)).ProduktListe;
//foreach (ListViewItem item in this.listView1.Items)
// foreach (Produkt produkt in produktse)
// produktse.Add((Produkt)item.Tag);
//}
this.ShowItem1(produktForm.Produkt);
}
}
}
}
}
private void MenuItemNew_Click(object sender, EventArgs e) hier liegt der Fehler
Kann mir jemand helfen
@hustbaer sagte in Stackoverflow bei instanzierung eine großen Objekts.:
Ja. Oder sagen wir so: wenn es am JIT liegt, dann müsste das so sein. Bzw. auch umgekehrt: wenn es so ist, dann liegt es ziemlich sicher am JIT.
Alles klar Kommender ich kam bisher nicht dazu , heute probiere ich es
EDIT: @hustbaer Ja die zweite Instanziierung scheint schneller zu gehen;)
@whatever sagte in C# + ESP8266 (WemosD1Mini) Serielle Verbindung nicht möglich:
void loop() {
Serial.print('1');
delay(200);
}
...
while (true)
{
Console.WriteLine(port.ReadLine());
}
Wenn du mit ReadLine liest, dann wäre es schlau auch Zeilenumbrüche zu schicken.
Bzw. wenn du byteweise lesen willst, dann solltest du ReadByte verwenden.
while (true)
{
int b = port.ReadByte();
if (b >= 0)
Console.Write((char)b);
}
Hallo Leute,
ich habe noch ne ne Denker Frage: Ich möchte Met-Daten in Form einer Auflistung von "primitive" Daten in einem Attribute-Darstellen. Da die erlaubten Argument Typen in Attributen eingeschränkt sind, habe ich mir sowas in der Art vorgestellt, ist sehr kryptisch, aber einfach geht es wohl nicht!? Die Attribute werden "Maschinell" generiert, muss so für das menschliche Auge nich so schön sein:)
Bwp:
[MetaProperty(
new object[] { "A", typeof(System.Int32), "0" } ,
new object[] { "B", typeof(System.String), "a" },
new object[] { "C", typeof(System.Guid), "d0c3317b-52eb-4b9d-9f91-aafac1bbcd13" },
new object[] { "D", typeof(System.DateTime), "2021-21-8 07:44:44" })]
class X{}
Das Attribute Signatur sähe dann so aus:
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
sealed class MetaProperty : Attribute
{
// See the attribute guidelines at
// http://go.microsoft.com/fwlink/?LinkId=85236
public MetaProperty(params object[] ss)
{
}
}
Hab ihr vll. noch nei de, wie e schönes sein könnte? Am ende soll ne Dictionary mit den werten rausploppen;=)
Danke euch
@micha7 sagte in Visual Studio: Projekt kopieren und mit der Kopie weiterarbeiten:
Ein erfahrener Programmierer wird immer eine Lösung finden um sein Ziel zu erreichen. Ich habe noch nicht so viel Erfahrung. Mir ist es schon mehrfach passiert, dass ich irgendwas in einem Projekt verändert habe, und irgendwann geht plötzlich gar nichts mehr und man weiss nicht warum. Dann wünscht man sich dass man vorher eine Kopie gemacht hätte.
Daher wird ein erfahrener Progarmmierer ein VCS verwenden, wo man den alten Stand wieder herstellen kann, wenn man zu viel verpfuscht hat. Idealerweise sowas wie Github, dann ist dein Projektordner überall verfügbar, wo ein Internet-Zugang existiert.