Noch eine andere Frage vieleicht könnt ihr mir auch dabei Helfen.
Ich lese aus einer Excel Datei ein Datenbereich von z.b. 6 Zellen aus.
habe das mit
Range range = (Range)ws.get_Range("Range6Z");
nun möchte ich den Bereich in einer Textbox darstellen.
Wenn ich das direkt zuweise kriege ich System.Object[,]
als Textausgabe.
Ich deken mann müsste die Zellen separieren können und über eine Schleife vieleicht Ausgeben.
hustbaer schrieb:
@Marco82
Wenn du einen Wrapper um das COM Interface hast, dann implementiere in diesem Wrapper einfach IComponent , steck das Wrapper Objekt in components rein, und fertig.
Einen zusätzlichen Wrapper (zu dem den .NET ohnehin schon für COM Objekte erzeugt) kann ich leider nicht erstellen, weil sonst die GetInterface() Methode der "Hauptschnittstelle" des COM Objekts nicht mehr funktioniert.
Wobei meines Wissens die GetInterface() Methode (der von .NET durch Interop gekapselten COM Komponente) in etwa dem IDispatch des COM-Server an sich entspricht.
COM_Komponend_3rdParty.Machine objMachine = new COM_Komponend_3rdParty.Machine();
MyNamespace.MyCOMWrapper objVersion;
objVersion = (MyNamespace.MyCOMWrapper)objMachine.GetInterface(COM_Komponend_3rdParty.DNC_INTERFACE_OBJECT.DNC_INTERFACE_VERSION);
Exception:
Der System.__ComObject-Typ kann nicht in MyNamespace.MyCOMWrapper konvertiert werden.
Danke, mit der Geschwindigkeit hatte es nichts zu tuen.
War nen Programmierfehler, man darf die initialisierung von UsbSpi nich in eine eigene Klasse packen, sonder musste sie in der Form Klasse als Global initialisieren.
Kann ich mittels HttpListener Sessions anlegen/bearbeiten?
Für einen kleinen Miniwebserver möchte ich dass Nutzer anhand einer Session wiedererkannt werden können.
Der Miniwebserver verwendet die HttpListener-Klasse.
Ich finde im Web habe ich bisher leider nichts passendes gefunden.
JKa also ich habe schon seit einige Zeit mit VBA , VB , C++ programmiert und jetzt seit ca. 2 Monten mit C# .
Weiß da schoon ein paar sachen, mir fehler einfach immer ein paar Tips zu bestimmt Themen.
Haben z.B. die Daten die ich von der Txt auslesen wollte im Moment im Programmcode. Das Möcvhte ich nur auslagern.
Und ich möchte damit eine dynamischere Änderung bewirken. Auch für Arbeitskollegen die nicht programmieren können.
Mein Ziel ist es für ca. 20 verschiedene Elektronikkarten die Nennwerte
abzurufen.
Und das ist im Moment im Code, wollte es auslagern in einen TXT und ganz später ein mal in eine Datenbank.
Aber wiegesagt stehe am Anfang und muss mich langsam herran arbeiten.
Hallo Leute,
ich versuche gerade wie in unzähligen Tutorials beschrieben ist das Shockwave Flash Object mit Visual Studio 2010 in einer Windows Forms Anwendung zu verwenden. Doch leider kann ich es bei mir unter den COM - Steuerelementen nicht finden:
http://imageshack.us/f/607/comfj.jpg/
Das Steuerelement hat in den Tutorials immer einen Pfad in dem es einen Macromedia Ordner gibt. Wird der Flash Player nicht mittlerweile von Adobe verwaltet? D.h. werden da vl. immer alte Versionen verwendet?
Kennt irgendwer eine Möglichkeit wie das funktioniert? Gibt es irgendwo eine Version des Flash Players die sicher funktioniert?
Hier noch ein so ein Tutorial von dem ich spreche: http://www.youtube.com/watch?v=_mH378IyJH8&noredirect=1
Vielen dank für eure Hilfe!
Hi,
abgesehen davon, dass meiner Meinung nach ein ; hinter den Servernamen gehört, ist hier wohl das Problem, dass du auf dem Webserver mit einem anderen User eingeloggt bist als auf deinem lokalen Rechner. Da du Integrated Security=True gesetzt hast, wird also versucht sich mit dem aktuellen Windows-Benutzer auf dem SQL Server anzumelden, der wird beim Webserver im Zweifel anders aussehen als lokal bei dir und muss im SQL Server noch die nötigen Berechtigungen bekommen.
mfG KaPtainCugel
Wie kommst du auf diese seltsame Idee? Nur WinRT Applikationen müssen per App-Store installiert werden. C# oder .Net Desktopanwendungen unterliegen dieser Einschränkung nicht. Zumindest wäre das was ganz neues...
Grüssli
Anksunamun schrieb:
Ich will also den String als Variablen-Namen ansprechen.
Heißt das auch, dass du in Checker 30 int-Variablen hast oder ist dein Beispiel nur eine vereinfachte Form? Denn dann könntest du die Werte auch in einem Dictionary<string, int> ablegen und den String aus TextBox.Name als Key verwenden.
Ansonsten könnte vielleicht auch http://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx helfen, die unelegante Reflection-Lösung zu vermeiden.
Hallo,
ich möchte gerne events auslösen. Beim Server kommt das Event an, aber nicht
beim Client. Warum nicht, muss ich da noch etwas beachten?
Hier der Code dazu:
server
static void Main(string[] args)
{
IpcChannel channel = new IpcChannel("localhost:32600");
ChannelServices.RegisterChannel(channel,true);
GethLib.serverMethods.critmsg += new GethLib.serverMethods.critmsgHandler(serverMethods_critmsg);
Console.WriteLine("The name of the channel is {0}.",
channel.ChannelName);
Console.WriteLine("The priority of the channel is {0}.",
channel.ChannelPriority);
System.Runtime.Remoting.Channels.ChannelDataStore channelData =
(System.Runtime.Remoting.Channels.ChannelDataStore)
channel.ChannelData;
foreach (string uri in channelData.ChannelUris)
{
Console.WriteLine("The channel URI is {0}.", uri);
}
System.Runtime.Remoting.RemotingConfiguration.
RegisterWellKnownServiceType(
typeof(GethLib.serverMethods), "serverMethods",
System.Runtime.Remoting.WellKnownObjectMode.Singleton);
string[] urls = channel.GetUrlsForUri("serverMethods");
if (urls.Length > 0)
{
string objectUrl = urls[0];
string objectUri;
string channelUri = channel.Parse(objectUrl, out objectUri);
Console.WriteLine("The object URI is {0}.", objectUri);
Console.WriteLine("The channel URI is {0}.", channelUri);
Console.WriteLine("The object URL is {0}.", objectUrl);
}
Console.WriteLine("Press ENTER to exit the server.");
Console.ReadLine();
Console.WriteLine("The server is exiting.");
}
static void serverMethods_critmsg(string CritMsg)
{
Console.WriteLine(CritMsg);
}
}
servermethods:
public class serverMethods:MarshalByRefObject
{
private int msg;
private string xCritmsg = "Kritischer Wert erreicht!";
public delegate void critmsgHandler(string CritMsg);
public static event critmsgHandler critmsg = null;
public int Msg
{
get
{
if (msg > 5)
{
if (critmsg != null)
{
critmsg(xCritmsg);
}
}
return (msg++);
}
}
}
Client:
class Program
{
static void Main(string[] args)
{
IpcClientChannel clientChannel = new IpcClientChannel();
ChannelServices.RegisterChannel(clientChannel,true);
RemotingConfiguration.RegisterWellKnownClientType(typeof(GethLib.serverMethods), "ipc://localhost:32600/serverMethods");
GethLib.serverMethods sm = null;
for (int i = 0; i < 10; i++)
{
sm = new GethLib.serverMethods();
Console.WriteLine(sm.Msg);
}
GethLib.serverMethods.critmsg += new GethLib.serverMethods.critmsgHandler(serverMethods_critmsg);
}
static void serverMethods_critmsg(string CritMsg)
{
Console.WriteLine(CritMsg);
}
}
Danke
void lb_aufstellung_SelectedIndexChanged(object sender, EventArgs e)
{
lbl_stärke.Text = Reader.GetValue(1).ToString();
}
sollte schon ausserhalb deiner ersten funktion stehen...
lies doch die daten erst einmal ein und dann arbeite darauf.
ergo:
Dictionary<Spieler,Stärke> _Spielerdaten = new Dictionary<Spieler,Stärke>();
void ReadDB()
{
...
while (Reader.Read())
{
_Spielerdaten[new Spieler(Reader.GetValue(0).ToString())] = new Stärke(Reader.GetValue(1).ToString());
}
...
}
dann kannst du dir eine funktion schreiben die auf "SelectedIndexChanged" horcht.
darin:
-wer wurde angeklickt?
-wer ist das in meinen _Spielerdaten
-_Spielerdaten[Spieler] in dein Label eintragen
Grüße
Ich hatte gerade eine "Idee". Bevor du weiterliest, möchte ich dich mit zwei Dingen konfrontieren:
1. Wie weit bist du bereit zu gehen?
2. Der nachfolgende Code ist ein Proof Of Concept und soll nur eine Lösung skizzieren. Aber der Code funktioniert.
Ich habe eine funktionierende Lösung gefunden. Sie ist allerdings krank und bringt eine Menge anderer Nachteile mit. Aber wer weiss ...
struct Image
{
int width;
int height;
};
#define MY_EXPORT extern "C" __declspec(dllexport)
MY_EXPORT void InitImage(int width, int height, Image* img)
{
img->width = width;
img->height = height;
}
using System;
using System.Dynamic;
using System.Runtime.InteropServices;
namespace SharpTest
{
[StructLayout(LayoutKind.Sequential)]
class Image
{
private readonly int m_width;
private readonly int m_height;
public Image()
{
m_width = 0;
m_height = 0;
}
public int Width { get { return m_width; } }
public int Height { get { return m_height; } }
}
static class NativeMethods
{
[DllImport("NativeLibTest.dll", EntryPoint = "InitImage", CallingConvention = CallingConvention.Cdecl)]
public static extern void CreateImage(int width, int height, [Out] Image img);
}
class NativeCaller
: DynamicObject
{
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
var method = typeof(NativeMethods).GetMethod(binder.Name);
var parameters = method.GetParameters();
if((parameters.Length - 1) != args.Length)
{
result = null;
return false;
}
var lastParameter = parameters[parameters.Length - 1];
var arguments = new object[args.Length + 1];
for(int i = 0; i < args.Length; ++i)
{
arguments[i] = args[i];
}
result = arguments[args.Length] = Activator.CreateInstance(lastParameter.ParameterType);
method.Invoke(null, arguments);
return true;
}
}
public class Program
{
public static void Main(string[] args)
{
dynamic nativeCaller = new NativeCaller();
var image = nativeCaller.CreateImage(100, 200);
Console.WriteLine("Width: {0}\tHeight: {1}", image.Width, image.Height);
Console.ReadKey(true);
}
}
}
Das NativeCaller Objekt passt den Aufruf der Methode entsprechend an und erstellt für dich das letzte Argument und gibt dieses als Resultat zurück. Die Klasse NativeCaller , einmal korrekt implementiert, muss nicht mehr angepasst werden und lädt alle nötigen Informationen aus den Methoden definiert in NativeMethods . Die importierten Methoden definiert man wie bisher.
Es lebe dynamic !
Grüssli
hustbaer schrieb:
Eigentlich sollte
Dispatcher.BeginInvoke(() =>
{
// Hier der Code für die Control-Elemente
});
ausreichend sein.
Da bekomme ich eine lambda/Delegat-Konvertierung Fehlermeldung.
Aber trotzdem danke, Variante 2 scheint "normaler" zu sein, also nehm ich die.
Da ich bei meinem Projekt auch an der Problematik dran war möchte ich ein paar Tipps dazu geben. Es ist nämlich so, dass WPF-Applikationen immer erstmal auf US/EN eingestellt sind. Das kann man leicht ändern indem man in den Konstruktor vom MainWindow das reinschreibt:
// Set Operating-System-Culture for this Application
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
Das bewirkt dass das Programm nach aussen hin das Komma als Dezimal-Separator benutzt. Also sowohl beim Import/Export von double als auch bei der Darstellung in Control-Elementen. Nur im Code selber benutzt man dann weiterhin den Punkt.
Auch praktisch ist, wenn man den aktuell verwendeten Separator ausliest:
string separator = NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator;
Grüsse
Ank
Bei TextBox geht es wohl nur so. Was man machen kann, ist RichTextBox verwenden, und den Text als PlainText laden bzw speichern. Bei RichTextBox gibt es eine Methode namens Find(). Mit dieser kann man nach Wörtern suchen. Eine Methode zu Ersetzen gibt es dort nicht. Man kann dazu aber SelectedText verwenden. Tschüüüüsss.