Hallo Leute,
Ich versuche ein UDP-Packet zu empfangen.
Es wird ein UDP-Multicast an das lokale Subnetz geschickt und auf eine Antwort gewartet:
String data = "HALLO";
UdpClient client = new UdpClient();
IPEndPoint qwer = new IPEndPoint(IPAddress.Parse("192.168.10.255"), 4712);
client.EnableBroadcast = true;
client.Connect(qwer);
byte[] asdf = Encoding.UTF8.GetBytes(data);
client.Send(asdf, asdf.Length);
int port = ((IPEndPoint)client.Client.LocalEndPoint).Port;
IPEndPoint receive = new IPEndPoint(IPAddress.Any, port);
byte[] received = client.Receive(ref receive);
Console.WriteLine(Encoding.UTF8.GetString(received));
Console.Read();
Das UDP-Packet wird auf dem Client empfangen (Wireshark auf dem Client zeigt das Paket an),
jedoch empfängt die C#-Software das Packet nicht. Der Port des LocalEndpoint stimmt auf dem Server und Client überein.
Wenn ganz oben anstatt "192.168.10.255" die IP-Adresse des Servers "192.168.10.42" verwendet wird, funktioniert auch das Empfangen des Packetes.
Wo liegt hier der Fehler?
mfg,
Dexter
Ich hatte mit dem Bitmap.Save auch immer Probleme,
aber ich mach das immer folgendermaßen und hatte noch nie Probleme damit:
FileStream fs = new Filestream(file, FileMode.Create);
Bitmap.Save(fs);
fs.Flush();
fs.Close();
So ich werde dann mal auch was dazu sagen 😃
Der Vergleich im RGB-Farbraum ist leider nicht ausreichend, da dieses Projekt später vielleicht in der Industrie eingesetzt wird und da zB auch Schwarz von Anthrazit unterschieden werden muss.
Ich habe bereits ein fertiges Programm erstellt, welches mir die Farben in den CieLab-Farbraum transformiert und dann mit einem vom User wählbaren Algorithmus von zwei Farben die Differenz ausrechnet.
Hier noch zwei Links, die mir dabei sehr geholfen haben 😃
Manipulating colors in .NET - Part 1
Delta E (CIE 1976)
Dexter
Was erstellt den Bitmap für einen RGB-Farbraum?
Ich meine Bitmap.GetPixel()
Dexter
Gut, danke 😃
Ich werd mich dann mal mit Lab* etwas intesiver beschäftigen.
Dexter
Hallo!
Ich bräuchte nen kleinen Denkanstoß 😃
Ich bekomme eine Farbe geliefert und ca. 20 verschiedene Referenz-Farben.
Ich sollte jetzt herausfinden, welcher Referenz-Farbe die aktuelle Farbe am ähnlichsten ist, jedoch sollte eine Farbe, welche überhaupt nicht zu den Referenz-Farben passt, auch nicht einer zugeordnet werden.
Jetzt meine Frage:
Welchen Farbraum würdert ihr mir empfehlen? RGB bzw. HSV/HSL?
Dexter
Und was ich noch als Vorschlag haette,
dass zB wenn der Arbeiter schon was zu tun hat, dass da eine MessageBox kommt bzw, dass in der Hauptform anzeiget wird,
was der Techniker gerade macht.
Wenn ich im Fenster AKW-Übersicht ihn irgendwohin schicken will, kommt gar nichts und dann muss man erst in den Chat rüberspringen um herauszufinden, wieso nichts kommt.
Dexter
Sehr schönes Programm 😁
Ich hab trotzdem eine Frage dazu:
Wenn eine Pumpe abschmiert und ich den Techniker dahin schicke,
meint er nur: "Warte auf Instruktionen" ?!
Was muss ich den tun, damit die wieder laufen?
Im Anhang, mein letzter Versuch. Das find ich mal witzig ^^
Dexter
Ich habe mal eine Frage zu Visual Studio 2008.
Ich publiziere mein Projekt direkt mit Visual Studio 2008.
Da wird ja ein OneClick-Setup erstellt, welches automatisch Updates herunterläd usw.
Gibt es da eine Möglichkeit, dass dabei auch automatisch einen Link in den Autostart-Ordner erzeugt wird?
Dexter
Hey!
Hatte gerade eine Idee zum Thema Hackerspiel.
Wie wäre es mit einem Online-Modus? Da könnten Leute mit und gegeneinander Spielen. Ja es wäre viel Arbeit ^^
mfg Dexter
Nachtrag, falls jemand das gleiche Problem hat: Es lag nicht an meiner WPF-Form, sondern an meinem System.Windows.Forms.Application.Run(); Das hast mir das anscheinend blockiert.
So jetzt hab ich das ganze auf System.Windows.Application.Current.Run() umgestellt und jetzt funktioniert die Eingabe wieder.
Dexter
Also es sieht bei mir so aus, wie im Anhang.
Dexter
Hab auch einen Bug gefunden. Wenn man bei der Installation bei der Auswahl des Root-Dir's auf abbrechen klickt,
kommt ein Fehler:
System.Exception: There was no Rootdirectory chosen.
Dexter
Gute Morgen!
Ich hab zu dieser frühen Stunde bereits ein Problem. In meiner WPF-Form funktioniert die Eingabe der RichtextBoxen und Textboxen nicht. Funktionieren tut nur die Leertaste und die Backspace. Alles andere wird von den Boxen nicht erfasst. Hab den gesamten Xaml Code in ein anderes Projekt ausgelagert und siehe da, auf einmal funktioniert es wieder. Jetzt meine Frage: Wieso das?
Mein Xaml-Code:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AbsenceAssistant.EmployeeClient.MainWindow"
Title="Abwesenheits Assistent" Width="360" Height="370" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closing="Window_Closing" StateChanged="Window_StateChanged" WindowState="Minimized" Visibility="Collapsed" ShowInTaskbar="True">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions/>
<Menu Grid.Row="0" Grid.Column="0">
<MenuItem Header="Datei">
<MenuItem Header="Log Anzeigen"/>
<MenuItem Name="mnuI_Exit" Header="Beenden" Click="Exit_Click"/>
</MenuItem>
<MenuItem Header="Optionen">
<MenuItem Header="Optionen"/>
</MenuItem>
</Menu>
<Border Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch">
<StackPanel Grid.Column="0" Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
<ToggleButton Name="btn_Present" Margin="10" IsChecked="True" Checked="btns_ChangeStatus_Click">
Anwesend
</ToggleButton>
<ToggleButton Name="btn_Checkout" Margin="10" Checked="btns_ChangeStatus_Click">
Abmelden
</ToggleButton>
<ToggleButton Name="btn_NotAvailable" Margin="10" Checked="btns_ChangeStatus_Click">
Nicht verfübar
</ToggleButton>
<ToggleButton Name="btn_OutOfTheOffice" Margin="10" Checked="btns_ChangeStatus_Click">
Außer Haus
</ToggleButton>
</StackPanel>
</Border>
<StackPanel Name="stackP_Present" Grid.Column="0" Grid.Row="2">
<DockPanel>
<Label DockPanel.Dock="Top" Margin="0,30,0,20" HorizontalAlignment="Center">Kommentar:</Label>
<RichTextBox Name="richTB_Comment" IsReadOnly="False" DockPanel.Dock="Top" Height="80" Width="240" />
</DockPanel>
</StackPanel>
<DockPanel Name="stackP_Checkout" Grid.Column="0" Grid.Row="2">
<CheckBox Height="16" Name="checkB_OutLook_Checkout" Width="auto" Margin="5" DockPanel.Dock="Top" HorizontalAlignment="Center" VerticalAlignment="Top" Click="checkB_OutLook_Checkout_Click">Outlook-Termin?</CheckBox>
<GroupBox Header="Termin" Height="auto" Margin="10" Name="groupB_Checkout" Width="auto" DockPanel.Dock="Top" HorizontalContentAlignment="Center" VerticalContentAlignment="Top">
<StackPanel>
<Label Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top" Height="auto">Bezeichnung:</Label>
<TextBox Name="textB_Checkout_Identifier" IsReadOnly="False" Margin="10" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" Width="150" IsEnabled="True" IsUndoEnabled="False"></TextBox>
<Label HorizontalAlignment="Center" Margin="10,10,10,0">Voraussichtliches Wiederkommen:</Label>
<TextBox Name="textB_ComeBackDate" IsReadOnly="False" Margin="10" HorizontalAlignment="Center" Width="150" MaxLength="0" IsEnabled="True"></TextBox>
</StackPanel>
</GroupBox>
</DockPanel>
<DockPanel Name="stackP_NotAvailable" Grid.Column="0" Grid.Row="2" >
<CheckBox Height="16" Name="checkB_OutLook_NotAvailable" Width="auto" Margin="5" DockPanel.Dock="Top" HorizontalAlignment="Center" VerticalAlignment="Top" Click="checkB_OutLook_NotAvailable_Click">Outlook-Termin?</CheckBox>
<GroupBox Header="Termin" Height="auto" Margin="10" Name="groupB_NotAvailable" Width="auto" DockPanel.Dock="Top" HorizontalContentAlignment="Center" VerticalContentAlignment="Top">
<StackPanel>
<Label HorizontalAlignment="Center" VerticalAlignment="Top" Height="auto">Bezeichnung:</Label>
<TextBox Name="textB_NotAvailable_Identifier" Margin="10" HorizontalAlignment="Center" Width="150"></TextBox>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<RadioButton Name="radioB_HalfHour" Grid.Column="0" Grid.Row="0" Margin="10" IsChecked="True">1/2 Stunde</RadioButton>
<RadioButton Name="radioB_Hour" Grid.Column="1" Grid.Row="0" Margin="10">1 Stunde</RadioButton>
<RadioButton Name="radioB_TwoHour" Grid.Column="2" Grid.Row="0" Margin="10">2 Stunden</RadioButton>
<RadioButton Name="radioB_OwnTimespan" Grid.Column="0" Grid.Row="1" Margin="10">Benutzerdefiniert</RadioButton>
<TextBox Name="textB_OwnTimespan" Grid.Column="1" IsReadOnly="False" Grid.Row="1" Height="20" Width="100"/>
</Grid>
</StackPanel>
</GroupBox>
</DockPanel>
<DockPanel Grid.Column="0" Grid.Row="3">
<Button Name="btn_ChangeStatus" Margin="10" Width="100" DockPanel.Dock="Top" Click="btn_ChangeStatus_Click">Status ändern</Button>
<StatusBar Name="statusBar" DockPanel.Dock="Top">
<Label>Status</Label>
<Separator></Separator>
<Label>Kommentar</Label>
<Separator/>
<Label>Voraussichtliches Widerkommen</Label>
</StatusBar>
</DockPanel>
</Grid>
</Window>
Und der Code dahinter:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
namespace AbsenceAssistant.EmployeeClient
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class MainWindow : Window, IView
{
private System.Windows.Forms.NotifyIcon notifyIcon = new System.Windows.Forms.NotifyIcon();
private bool reallyExit = false;
public MainWindow()
{
}
private void btns_ChangeStatus_Click(object sender, RoutedEventArgs e)
{
try
{
if ((ToggleButton)sender == btn_Present)
{
btn_OutOfTheOffice.IsChecked = false;
btn_NotAvailable.IsChecked = false;
btn_Checkout.IsChecked = false;
stackP_Present.Visibility = Visibility.Visible;
stackP_NotAvailable.Visibility = Visibility.Hidden;
stackP_Checkout.Visibility = Visibility.Hidden;
}
else if ((ToggleButton)sender == btn_Checkout)
{
btn_OutOfTheOffice.IsChecked = false;
btn_NotAvailable.IsChecked = false;
btn_Present.IsChecked = false;
stackP_Present.Visibility = Visibility.Hidden;
stackP_NotAvailable.Visibility = Visibility.Hidden;
stackP_Checkout.Visibility = Visibility.Visible;
}
else if ((ToggleButton)sender == btn_OutOfTheOffice)
{
btn_NotAvailable.IsChecked = false;
btn_Present.IsChecked = false;
btn_Checkout.IsChecked = false;
stackP_Present.Visibility = Visibility.Visible;
stackP_NotAvailable.Visibility = Visibility.Hidden;
stackP_Checkout.Visibility = Visibility.Hidden;
}
else
{
btn_Present.IsChecked = false;
btn_Checkout.IsChecked = false;
btn_OutOfTheOffice.IsChecked = false;
stackP_Present.Visibility = Visibility.Hidden;
stackP_NotAvailable.Visibility = Visibility.Visible;
stackP_Checkout.Visibility = Visibility.Hidden;
}
}
catch { }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
btns_ChangeStatus_Click(btn_Present, null);
}
private void checkB_OutLook_NotAvailable_Click(object sender, RoutedEventArgs e)
{
groupB_NotAvailable.IsEnabled = !(bool)checkB_OutLook_NotAvailable.IsChecked;
}
private void checkB_OutLook_Checkout_Click(object sender, RoutedEventArgs e)
{
groupB_Checkout.IsEnabled = !(bool)checkB_OutLook_Checkout.IsChecked;
}
#region IView Members
public void Initialize()
{
#region Initialize NotfiyIcon and ContextMenu
//ContextMenu
System.Windows.Forms.ContextMenuStrip contextMenuStrip = new System.Windows.Forms.ContextMenuStrip();
//ContextMenuItems
System.Windows.Forms.ToolStripMenuItem cmnuI_OpenForm = new System.Windows.Forms.ToolStripMenuItem();
cmnuI_OpenForm.Name = "cmnuI_OpenForm";
cmnuI_OpenForm.Size = new System.Drawing.Size(230, 22);
cmnuI_OpenForm.Text = "Abwesenheits Assisten öffnen";
cmnuI_OpenForm.Click += new EventHandler(OpenForm_Click);
System.Windows.Forms.ToolStripMenuItem toolSMI_Present = new System.Windows.Forms.ToolStripMenuItem();
toolSMI_Present.Name = "toolSMI_Present";
toolSMI_Present.Size = new System.Drawing.Size(141, 22);
toolSMI_Present.Text = "Anwesend";
toolSMI_Present.Click += new System.EventHandler(ContextMenu_ChangeStatus_Click);
System.Windows.Forms.ToolStripMenuItem toolSMI_OutoftheOffice = new System.Windows.Forms.ToolStripMenuItem();
toolSMI_OutoftheOffice.Name = "toolSMI_OutoftheOffice";
toolSMI_OutoftheOffice.Size = new System.Drawing.Size(141, 22);
toolSMI_OutoftheOffice.Text = "Außer Haus";
toolSMI_OutoftheOffice.Click += new EventHandler(ContextMenu_ChangeStatus_Click);
System.Windows.Forms.ToolStripMenuItem toolSMI_Exit = new System.Windows.Forms.ToolStripMenuItem();
toolSMI_Exit.Name = "toolSMI_Exit";
toolSMI_Exit.Size = new System.Drawing.Size(230, 22);
toolSMI_Exit.Text = "Beenden";
toolSMI_Exit.Click += new EventHandler(Exit_Click);
System.Windows.Forms.ToolStripMenuItem toolSMI_ChangeStatus = new System.Windows.Forms.ToolStripMenuItem();
toolSMI_ChangeStatus.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
toolSMI_Present,
toolSMI_OutoftheOffice});
toolSMI_ChangeStatus.Name = "toolSMI_ChangeStatus";
toolSMI_ChangeStatus.Size = new System.Drawing.Size(230, 22);
toolSMI_ChangeStatus.Text = "Status ändern";
contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
cmnuI_OpenForm,
toolSMI_ChangeStatus,
toolSMI_Exit});
contextMenuStrip.Name = "contextMenuStrip";
contextMenuStrip.Size = new System.Drawing.Size(231, 70);
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager();
this.notifyIcon.ContextMenuStrip = contextMenuStrip;
this.notifyIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(@"C:\Programme\Hewlett-Packard\HP 3D DriveGuard\HPMDP Icons\hddrive.ico");
this.notifyIcon.Text = "Abwesenheitsassistent";
this.notifyIcon.Visible = true;
this.notifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(OpenForm_Click);
#endregion
InitializeComponent();
}
void OpenForm_Click(object sender, EventArgs e)
{
//Show the Form and make it Visible in the Taskbar. Workaround to fire Window_StateChanged, when this method is called for the first time
this.WindowState = WindowState.Normal;
if (this.Visibility == Visibility.Collapsed)
Window_StateChanged(this, null);
this.Visibility = Visibility.Visible;
}
void ContextMenu_ChangeStatus_Click(object sender, EventArgs e)
{
if (ChangeStatus != null)
ChangeStatus(new ChangeStatusEventArgs(((System.Windows.Forms.ToolStripMenuItem)sender).Text, "", "", false));
}
//Terminates the full Programm
void Exit_Click(object sender, EventArgs e)
{
reallyExit = true;
this.notifyIcon.Visible = false;
this.Close();
if (CloseApplication != null)
CloseApplication(this, null);
}
public void DisplayMessage(string message)
{
System.Windows.Forms.MessageBox.Show(message);
}
public event ChangeStatusEventHandler ChangeStatus;
public event EventHandler AddNewEmployee;
public event EmployeeEventHandler UpdateEmployee;
public event GetInfoEventHandler GetEmployee;
public event GetInfoEventHandler GetEmployeeLog;
public event EventHandler CloseApplication;
#endregion
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!reallyExit)
{
e.Cancel = true;
this.WindowState = WindowState.Minimized;
}
}
private void UpdateView(Employee employee)
{
statusBar.Items.Clear();
statusBar.Items.Add(employee.Status);
if (employee.Comment != string.Empty)
{
statusBar.Items.Add(new Separator());
statusBar.Items.Add(employee.Comment);
}
if(employee.ComeBackDate != string.Empty)
{
statusBar.Items.Add(new Separator());
statusBar.Items.Add(employee.ComeBackDate);
}
}
private void Window_StateChanged(object sender, EventArgs e)
{
this.ShowInTaskbar = this.WindowState == WindowState.Minimized ? false : true;
if (this.WindowState != WindowState.Minimized)
{
//Update the View, everytime the Form pop's up
object employee = null;
if (GetEmployee != null)
GetEmployee(out employee);
if (employee != null)
{
UpdateView((Employee)employee);
}
else
{
if (AddNewEmployee != null)
AddNewEmployee(this, null);
}
}
}
private void btn_ChangeStatus_Click(object sender, RoutedEventArgs e)
{
if ((bool)btn_Present.IsChecked)
{
if(ChangeStatus != null)
{
TextRange tr = new TextRange(richTB_Comment.Document.ContentStart, richTB_Comment.Document.ContentEnd);
ChangeStatus(new ChangeStatusEventArgs("Anwesend", tr.Text, "", false));
}
}
else if ((bool)btn_OutOfTheOffice.IsChecked)
{
if (ChangeStatus != null)
{
TextRange tr = new TextRange(richTB_Comment.Document.ContentStart, richTB_Comment.Document.ContentEnd);
ChangeStatus(new ChangeStatusEventArgs("Anwesend", tr.Text, "", false));
}
}
else if ((bool)btn_Checkout.IsChecked)
{
if (ChangeStatus != null)
ChangeStatus(new ChangeStatusEventArgs("Abgemeldet", textB_Checkout_Identifier.Text, textB_ComeBackDate.Text, (bool)checkB_OutLook_Checkout.IsChecked));
}
else
{
TimeSpan tmp = new TimeSpan();
if ((bool)radioB_HalfHour.IsChecked)
{
tmp = DateTime.Now.TimeOfDay + new TimeSpan(0, 30, 0);
}
else if ((bool)radioB_Hour.IsChecked)
{
tmp = DateTime.Now.TimeOfDay + new TimeSpan(1, 0, 0);
}
else if ((bool)radioB_TwoHour.IsChecked)
{
tmp = DateTime.Now.TimeOfDay + new TimeSpan(2, 0, 0);
}
string comeBack = tmp.Hours + ":" + tmp.Minutes;
if (ChangeStatus != null)
ChangeStatus(new ChangeStatusEventArgs("Nicht Verfügbar", textB_NotAvailable_Identifier.Text, comeBack, (bool)checkB_OutLook_NotAvailable.IsChecked));
}
}
}
}
Dexter
Der erste Versuch 🙂
Du hast 290 Punkte erreicht, damit befindest du dich auf Platz 77458 von 623880
Du schreibst 394 Zeichen pro Minute
Du hast 64 korrekt geschriebene Wörter und
Du hast 2 falsch geschriebene Wörter
mfg Dexter
Die Exceptin wird ausgelöst, wenn man den gleichen Port für Server-Port und TCP-QueryPort angibt, zumindest ist das bei mir so.
Dexter
//edit Achso, ja dann lag es daran, dass ich den falschen Port für QueryPort angegeben habe. Das ist aber etwas verwirrend finde ich.
Dein Programm sieht sehr gut aus 🙂
Ich habe da aber einen Fehler gefunden.
Diese Fehlermeldung kam beim Connecten auf einen Server.
Dexter
//edit Die Fehlermeldung kommt, wenn der Server-Port und der TCP-QueryPort der gleiche ist
Ich habe das so versucht aber das geht nicht
Was geht den genau nicht? Fehlermeldungen? Wie sehen die Einträge der MatchCollection aus?
Um RegEx Patterns zu testen hat herbivore ein gutes Programm geschrieben
und das gibts hier.
Dexter
Auf dein privates Member "name" kannst du von außen her nicht zugreifen. Dazu musst du eine Propertie definieren.
class Bauteile
{
public string Name { get; set; } // So wuerde es mit C# 3.0 aussehen
}
Dann kannst du per bausaetze[0].teile[0].Name darauf zugreifen.
Dexter
//edit eine Arraylist teile musst du auch als public deklarieren, sonst kannst du darauf auch nicht zugreifen
Hab da gerade mal ein Bug gefunden. Wenn ich die Toolbar unten andocke und die Option "Keep the Menubar on top of other windows" aktiviert habe, wird meine dreizeilige Taskleiste nicht mehr angezeigt, sondern ist nur Grau, wie im Angehängten Pic. Wenn ich die Option deaktiviere, wird die Taskleiste korrekt angezeigt.
Dexter
Ja recht einfach zu machen ist das schon, jedoch ist das Mono-Framework gerade mal auf dem Stand vom Framework 1.0 und das ist nichtmal ganz komplett implementiert.
Dexter
Original von svenson
Smalltalk ist auf jeden Fall eine spannende Sprache. Aber was meinst du eigentlich mit "plattformunabhängig"? Dafür gibts nix zu kaufen, außer vielleicht in einem Heise-Forum. 🙂
Tschuldigung, wenn ich mich falsch ausgedrückt habe. Ich meinte damit, dass ich mit einer Programmimersprache anfangen will, bei welcher ich mein Programm leicht auf Linux bzw Windows zum laufen bringen kann, nicht so wie C#.
Dexter
Ich habe vor mit meiner Programmierung in Richtung Plattformunabhängigkeit zu gehen. Jetzt ist meine Frage: Welche Sprachen würdet ihr mir empfehlen, neben Java?
Was haltet ihr von SmallTalk bzw Scala?
Dexter
Ich habe da zwei Fehlermeldungen bekommen.
Die erste beim Starten und die lautet wie folgt: "System.XML.XMLException: Das Stammelement ist nicht vorhanden".
Und wenn ich ein neues Profil anlegen will bekomme ich ne NullReferenceException "Der Objektverweis wurde nicht auf eine Objektinstanz gelegt". in der bttAdd_Click Methode.
Ansonsten sieht das Programm gut aus.
Dexter
string tmp = "Ein Text";
string s = tmp.Substring(tmp.Length -1);
Dexter
Was dir auch helfen könnte, ist der Nightcast von Microsoft über Compilerbau. Da wird auch zuerst der Code in Tokens aufgeteilt und das könnte man auch für Mathematische Funktionen nehmen, zum aufsplitten.
Dexter
Hab das ganze jetzt etwas geändert. Ich schließe nicht den CryptoStream, sondern den MemoryStream dann funktionierts einwandfrei.
Dexter
//edit Wenn ich zuerst das Byte-Array aus dem MemoryStream hole und dan den CryptoStream schließe, kommt genau der gleiche Fehler
Das ist genau, dasselbe nur das ich halt ein Encrypter erzeuge, aber hier mal den Code:
public byte[] EncryptBytes(byte[] data, string password)
{
MemoryStream ms = new MemoryStream();
PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65,
0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
Rijndael rij = Rijndael.Create();
rij.Key = pdb.GetBytes(32);
rij.IV = pdb.GetBytes(16);
CryptoStream ctStream = new CryptoStream(ms, rij.CreateEncryptor(), CryptoStreamMode.Write);
ctStream.Write(data, 0, data.Length);
ctStream.Close();
byte[] enCryptedData = ms.ToArray();
return enCryptedData;
}
Dexter
//edit Also meine EncryptBytes-Methode funktioniert, da sagt er nichts, nur bei der DecryptBytes-Methode wirft er eine asynchrone Exception bei ctStream.Close(), also geh ich davon aus, dass sie vom Write in dem Stream 2 Zeilen höher kommt.
Ich hab da n kleines Problem und zwar, wenn ich ein byte-Array Decrypten will mit der nachfolgenden Methode, bekomme ich entweder, wenn es sehr wenige Bytes sind einen "Die Länge der zu entschlüsselnden Daten ist ungültig." Fehler und bei 4096 Bytes, welche ich aus einem File gelesen habe, bekomm ich den Fehler: "Zeichenabstände sind ungültig und können nicht entfernt werden."
public byte[] DecryptBytes(byte[] data, string password)
{
MemoryStream ms = new MemoryStream();
PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65,
0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
Rijndael rij = Rijndael.Create();
rij.Key = pdb.GetBytes(32);
rij.IV = pdb.GetBytes(16);
CryptoStream ctStream = new CryptoStream(ms, rij.CreateDecryptor(), CryptoStreamMode.Write);
ctStream.Write(data, 0, data.Length);
ctStream.Close();
byte[] decryptedData = ms.ToArray();
return decryptedData;
}
In die andere Richtung, also wenn ich CryptoStream(ms, rij.CreateEncryptor() ...) schreibe, funktioniert das einwandsfrei.
Dexter
Original von herbivore
Hallo superbobbes,so wie ich es verstanden habe:
diTagesUhrzeiten[tbStunden.Text] += ";" + tbMinuten.Text;
herbivore
Nicht ganz, er will das siebte Element in der Dictionary editieren.
Dictionary<string, string> dic = new Dictionary<string, string>();
int count = 0;
foreach(string key in dic.Keys)
{
if(count == 7)
{
dic[key] += ";" + tbMinutes.Text;
}
else
count++;
}
Dexter
//edit Ok da hab ich wohl was falsch verstanden
Du kannst dir ja per Dictionary.Keys alle Keys liefern lassen und dann nimmst du von diesem string[] Array einfach das siebte Element.
Dexter
FileStream und dessen Eigenschaft "Length" Sollte dir helfen.
Dexter
string[] tmpString = diStundenUhrzeiten[tbStunden.Text].Split(';');
foreach(string s in tmpString)
{
liStundenUhrzeiten.Add(s);
}
Dexter
Entwicklungsumgebung: Visual Studio 2005 Express (kostenlos) oder Profi (kostenpflichtig)
Buch:
Da gibts die kostenlose Variante mit eBooks wie Galileo-Computing, ansonsten solltest du im Forumsbereich für Bücher sicher etwas gutes finden.
Was mir geholfen hat am Anfang, weil es sehr einfach und gut erklärt ist,
auch für Leute ohne Programmiererfahrung, war das Buch "Jetzt lerne ich C#" vom Verlag Markt+Technik.
Dexter
Ja was bringt das denn? Ich möchte während der normale Sound über die Boxen läuft einen anderen Song auf meinem Headset vorhören.
Hab da schon was dazu gefunden. Und zwar Asio4all.
Dexter
@Borg ich dachte nicht an so etwas selber schreiben, sondern daran, dass vl jemand so ein Programm kennt. Ich habe mich bereits nach anderen Programmen umgesehen die mehrere Soundkarten unterstützen, jedoch haben diese Features nicht, die ich auch brauchen würde und das Angebot an DJ Software ist nicht wirklich sehr groß.
@tom-essen Prinzipiell möglich, jedoch ist dann das ganze nur mehr Mono 🤔
Dexter
Hallo! Gleich am Anfang, Sorry wegen dem Titel, aber mir ist nicht aussagekräftigeres in kurzer Schreibweise eingefallen.
Also ich hab vor kurzem Traktor DJ Studio 3 bekommen. Jetzt hab ich ein kleines Problem. Traktor arbeitet nur mit einer Soundkarte und da ich in meinem Laptop nur einen Audio-Ausgang habe, wird nichts mit vorhören des Songs usw :S Jetzt meine Frage: Ich hab ein USB Headset, welches als andere Soundkarte angezeigt wird. Könnte man rein Theoretisch diese zwei als eine Soundkarte darstellen sodass ich im Traktor Studio mit beidem arbeiten kann?
Eine möglichkeit wäre vielleicht, dass man ein Programm installiert, welches als Soundkarte angezeigt wird, dieses mehrere Kanäle bereitstellt und diese dann verschiedenen Soundkarten zuordnet.
Dexter
Also um die Tabelle anzuzeigen kannst du entweder mit einer ListView mit View auf Details gestellt oder mit einem DatagridView arbeiten.
Dexter
Also wenn das mit den Spalten UND Zeilen Bezeichner geben nicht umbedingt notwendig ist, benutz ein Mehrdimensionales Array.
Ansonsten musst du dir halt eine eigene Klasse schreiben, die so etwas bereit stellt.
Dexter
Du kannst statt info.GetFiles(folder) das ganze auch per Directory.GetFiles(folder, extension) machen, dann liefert er dir nur die Files mit der Extension
Das passiert auch bei deiner Methode? Ich hab eher gedacht, dass wenn dein UserControl MouseLeave erhält sollst du überprüfen, ob vl die Mouse über einem Control im Usercontrol ist.
Dexter
Also um die Kommunikation zwischen den Forms zu gestalten, schau dir das hier mal an.
So kannst du die Instanz der Klasse auf alle Formulare verteilen.
Dexter
Wenn eine Klasse IEnumerator implementiert, dann kannst du sie mit foreach durchlaufen.
Dexter
Ich habe mehrere Formulare, auf denen jeweils eine ExplorerBar ist. Jetzt möchte ich ein Array erstellen in dem alle Einträge für alle ExplorerBars enthalten sind und beim Öffnen eines Formulars wird dann in dieses Array geschaut (Feld "barID") welche Einträge diese ExplorerBar haben soll.
Erstelle einfach eine Klasse, welche den Zugriff auf eine ArrayList bereitstellt und gib dann einfach die Instanz dieser Klasse an alle Formulare.
Dexter
Dann frag halt ab, ob über einem daraufliegenden Control sich die Maus befindet und wenn nicht hat der User den UserControl verlassen.
D3xter
Schau mal unter .NET-Components, da hat dr4g0n76 bereits ein Programm geschrieben, welches Formeln interpretiert.
Dexter
//edit Der Thread trägt den Namen "Formeleditor"
Die Fehlermeldung bezieht sich auf
value = value / (60 * 60 * 24) * 365.25;
Das ist ein klarer Fall. Value ist int und in deiner Zeile steht 365.25, dass ist eine double-Zahl.
value = Convert.ToInt32(value / (60 * 60 * 24) * 365.25);
Sollte so funktionieren.
Dexter
Original von SirSydom
Hey schaut gut aus. Danke.Eine Frage noch: können die Inhalte von so einem ListViewItem nur Strings sein oder kann ich da auch andere Elemente reinhauen, zB DateTime, Ints oä ?
Die kannst du ja einfach mit ToString() in einen String konvertieren?
Original von SirSydom
Zweite Frage: Ist es möglich nach den einzelnen Columns zu sortieren? So wie beim DataGrid? Wenn ja, wie?
Afaik nicht, lasse mich aber gerne eines besseren Belehren.
Dexter