Laden...
T
tkrasinger myCSharp.de - Member
Softwareentwickler Enzesfeld (Niederösterreich) Dabei seit 26.03.2008 574 Beiträge
Benutzerbeschreibung

Forenbeiträge von tkrasinger Ingesamt 574 Beiträge

09.08.2013 - 07:34 Uhr
private void Button_Click(object sender, RoutedEventArgs e)
{
    //Variante a) not working:
    Task t = CreateTestFile();
    t.Wait();

    //Variante b) working:
    Task t2 = Task.Run( () => CreateTestFile());
    t2.Wait();
}

private async Task CreateTestFile()
{
    IStorageFolder rootPath;
    if (!(await FolderExists(ApplicationData.Current.LocalFolder, "Test")))
    {
        rootPath = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Test");
    }
    else
    {
        rootPath = await ApplicationData.Current.LocalFolder.GetFolderAsync("Test");
    }
    var file1 = await rootPath.CreateFileAsync(DateTime.Now.ToString("HHmm") + ".txt");
    return;
}

public async Task<bool> FolderExists(IStorageFolder rootPath, string foldername)
{
    try
    {
        await rootPath.GetFolderAsync(foldername);
        return true;
    }
    catch
    {
        return false;
    }
}

Wenn ich den Button klicke und den unteren Code aufrufe mit Task.Run() dann funktioniert das einwandfrei und relativ flott.
Wenn ich es allerdings mit Task.Wait() ausführe, dann passiert irgendwie gar nichts, der Code bleibt irgendwo hängen. Wenn ich dann probiere langsam durchzudebuggen, läuft auch der Code durch ...

Was mache ich falsch bzw. wo liegt der Unterschied?

23.07.2013 - 14:36 Uhr

Ich hol das nach der Zeit echt ungern wieder rauf, aber ich stehe genau vor dem Problem:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="DataGridScrollingTest.MainWindow"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ScrollViewer>
            <StackPanel>
                <Border Height="300" Background="#FF9999" Margin="10">
                    <TextBlock>Red</TextBlock>
                </Border>
                <DataGrid x:Name="grdData" 
                          ScrollViewer.CanContentScroll="True" 
                          ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
                <Border Height="300" Background="#1199FF" Margin="10">
                    <TextBlock>Blue</TextBlock>
                </Border>
            </StackPanel>
        </ScrollViewer>
    </Grid>
</Window>

Wenn ich mit der Maus über dem DataGrid (enthält z.B. 3 Zeilen) bin, kann ich nicht mehr per Mausrad scrollen. Das DataGrid verschluckt das Scrollen einfach - obwohl keine Scrollbar da ist.

Events bekomm ich nur PreviewMouseWheel aber MouseWheel nicht mehr.

Wie kann man das lösen - wenn ich weiß, dass das DataGrid nie einen vertikalen Scrollbalken hat?

04.04.2013 - 08:50 Uhr

Geh in der MSDN einfach eine Stufe rauf: http://msdn.microsoft.com/de-de/library/vstudio/dd460648(v=vs.100).aspx

Dort findest du dann die Sachen die ich beschrieben habe: CompositionContainer, Catalogs, StatisfyImports etc. Es gibt da wohl auch irgendwo ein Sample.

03.04.2013 - 12:41 Uhr

Schaut nach MEF/Prism oder so aus. Du musst sicherlich irgendwo mal einen CompositionContainer definieren und dort sowas wie StatisfyImports oder so aufrufen.

Mit dem Link den du gepostet hast fang ich nix an.

03.04.2013 - 09:24 Uhr

Klingt nach einem Türsteher der einen raushaut wenn man rein will, wo aber 2 Meter daneben eine andere offene, unüberwachte Tür ist ...

26.03.2013 - 10:51 Uhr

Hast du beim Deployen auf den Emulator schon mal ins Output-Window geschaut? Gibts da irgendwelche Fehlermeldungen?

07.03.2013 - 09:02 Uhr

Ich würds mal mit SqlConnection statt SQLConnection versuchen. C# ist CASE Sensitive!

08.11.2012 - 14:55 Uhr

Tollerweise braucht der Emulator für Windows Phone 8 nur einen SLAT (Second Level Address Translation) fähigen Prozessor, was der für Windows Phone 7 nicht braucht, und auch der Emulator fürs Surface nicht braucht.

Achtung also bei "älteren" Prozessoren!

13.08.2012 - 09:43 Uhr
Select Case kunde.Geschlecht
    Case True 'Männer 2%
        Call someOtherMethod(with1ForMen)
    Case False 'Frauen 2%
        Call someOtherMethod(with2ForWomen)
End Select

Was der Programmierer wohl für ein Geschlecht hatte um "Männer" als das "wahre" Geschlecht zu deklarieren ... 😉

30.07.2012 - 09:03 Uhr

Du könntest das ganze über einen globalen EventManager (EventDistributor) bauen (dazu gibts sicher auch anleitungen im Netz).

D.h. du definierst eine statische Klasse auf der du events publishen und subscriben kannst.

Es gäbe aber für die WPF auch fertige Frameworks wie Prism, wo du z.B: Regions definieren kannst und dann von jeder Stelle im Code über einen RegionManger an diese Stelle einfach deinen "Controls" reinsetzen kannst.

30.07.2012 - 08:41 Uhr

Ich hab heute mal ein kurzes Testprogramm zur Verwendung von FaultContracts in der WCF gebaut und dabei festgestellt, dass es rein performance technisch besser ist, das Object der FaultException<T> nicht als Exception zu throwen sondern beim return wert (sofern eine Klasse) als Property anzuhängen.

In meinem, sehr einfachen, Testprogramm brauchen 8 Testdurchläufe mit

throw new FaultException<ValidationFault>( new ValidationFault() { ErrorCode = x, ErrorMessage = msg})

gegenüber

result.Fault = new ValidationFault() { ErrorCode = x, ErrorMessage = msg};

etwa um ein 25% mehr Zeit, da jeder, in einer FaultEx resultierender Aufruf etwa 300ms braucht, statt etwa 15ms bei der Variante über die Property.

Warum also sollte man FaultContracts benutzen?

13.07.2012 - 12:19 Uhr
if (value is Offert)
{
	if(parameter is bool && !(bool)parameter && !value.IsUnsavedEntity())
	{
		result = Editable;
	}
	else if (!(parameter is bool) && value.IsUnsavedEntity())
		result = Editable;
}

Kann ich über die CodeAnalysis (oder über etwas anderes) irgendwie einstellen, dass diese Einzeiler IMMER in Klammern zu setzen sind und nicht wie hier einmal so und einmal so?

Beim StyleCop gabs dazu die Regel SA1503 CurlyBracketsMustNotBeOmitted.
Gibts da dazu irgendwie ein Pendant in CA? Ich mag im VS2012 StyleCop nicht mehr benutzen wenn es eh die CA gibt und außerdem hab ich das Gefühl der der StyleCop irgendwie sehr instabil ist.

18.06.2012 - 09:34 Uhr

solltest du über SelectedItem der ListBox rausbekommen

30.05.2012 - 13:30 Uhr

Habs hinbekommen. Submit-Button eingebaut, width auf 0 gesetzt, Submit-Action gecanceled und dann KeyPress selbst gehandeled.

Danke!

PS: display:none geht nicht, da kommt der Ton immer noch. Button verschwinden lassen geht nur über width:0

23.05.2012 - 08:46 Uhr

Danke für die Antworten, soweit ich sehe, klappt nun alles.

22.05.2012 - 10:58 Uhr

Besten Dank, das hätte ich alleine nie gefunden!

PS: Kann ich das irgendwie von der WebSeite aus steuern?

22.05.2012 - 08:39 Uhr

Und hier wird nicht verkleinert (siehe Header, Darstellung Navigation etc.)

Beides ist die exakt selbe IE-Version, an was kann das liegen?

22.05.2012 - 08:38 Uhr

Ich musste feststellen, dass meine Seite daheim im IE anders dargestellt wird als im Büro am IE - obwohl es die selbe IE Version ist und beides auf einem Win7 läuft. Wie kann das denn sein?

Hier die korrekte Darstellung mit Verkleinerung per CSS-Styles:

18.05.2012 - 12:37 Uhr

Ich habe eine Webseite gebastelt und habe nun festgestellt, dass bei allen meinen Textfeldern ein Sound gespielt wird, wenn man auf "Enter" drückt - auch wenn das Telefon auf Vibrieren eingestellt ist - was natürlich extrem nervt.

Z.B. auch hier:
http://de.selfhtml.org/html/formulare/anzeige/input_text.htm

Hat da jemand eine Idee woher der Sound kommt, wie man den abdrehen kann bzw. was ich ändern muss das das nicht passiert?

[Crosspost da keine Antwort]
http://answers.microsoft.com/de-de/winphone/forum/wp7-wpapps/tonsound-bei-enter-in-textfeldern-auf-webseite/da213edf-2d1e-4008-8810-7863cb1262d9

03.05.2012 - 12:59 Uhr

ich denke, dass was du meinst ist "Annotate" und das kommt erst mit den "Power Tools" für TFS. Allerdings weiß ich nicht, ob die mit der Express vom TFS kompatibel sind, zumal die Express, soweit ich weiß, immer noch im Beta-Stadium ist.

26.03.2012 - 12:38 Uhr

@Darth Maim.

Danke, ich wusste nicht, dass mit dem AI tatsächlich nur ein ö = o gemeint ist und nicht ö = oe.

In Kombination mit der Variante von t2t habe ich nun das WHERE umgebaut und damit funktioniert es:

SELECT *
FROM (
	SELECT 'Österreich 1'  as Bezeichnung
	UNION
	SELECT 'Oesterreich 2' as Bezeichnung
) Data
WHERE dbo.fn_ReplaceSpecialChars( Bezeichnung) LIKE dbo.fn_ReplaceSpecialChars( '%öst%')

Danke

26.03.2012 - 09:51 Uhr

verwendetes Datenbanksystem: SQL Server 2008 (R2)

SELECT *
FROM ( 
	SELECT cast('Österreich 1' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung 
	UNION
	SELECT cast('Oesterreich 2' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung 
) Data
WHERE Bezeichnung like ('%ö%')

vgl zu:

SELECT *
FROM ( 
	SELECT cast('Österreich 1' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung 
	UNION
	SELECT cast('Oesterreich 2' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung 
) Data
WHERE Bezeichnung like ('%öst%')

Mit der angegeben Collation sollte oe/ö eigentlich egal sein, beim oberen Statement geht das auch, warum funktioniert das untere nicht?

Muss ich wirklich im Suchstring die Umlaute ersetzen?

und warum funktioniert im Vergleich dazu dieses hier wie erwartet:

SELECT *
FROM ( 
	SELECT cast('DassV1' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung 
	UNION
	SELECT cast('DaßV2' as nvarchar) COLLATE Latin1_General_CI_AI as Bezeichnung 
) Data
WHERE Bezeichnung like ('%DaßV%')

EDIT:
Umlaut ersetzen geht gar nicht, weil er dann den Eintrag mit dem Ö gar nicht findet. Wie schaffe ich es, nach "öst" zu suchen und beide Einträge zu bekommen (ohne ein OR zu verwenden)

14.03.2012 - 12:49 Uhr

Leider muss ich mich - auch aus eigener Erfahrung - zur Zeit mal herbivore anschließen. Auch aufgrund der Tatsache, dass es Microsoft doch tatsächlich geschafft hat, dass man WP7 Anwendungen in "Silverlight" schreibt, das Telefon aber gar keine Silverlight-Anwendungen aus dem Web laden kann.

Also wenn ich Balmer wäre, wäre ich in dem Moment irgendwo in die zuständigen Microsoft-Gruppen reingekracht und hätte da mal jeden gefragt ob sie a bissi an Vogel haben ...

Zur Zeit würde ich, auch aufgrund der extremen Anzahl an Smartphone-Usern, auf HTML (5) setzen.

13.03.2012 - 16:17 Uhr

kriegst du denn den Pfad nicht über die Programm-Argument rein?

12.03.2012 - 11:59 Uhr

Meines Erachtens ist das für 100.000 Datensätze nicht zu langsam - kommt aber auch darauf an, wie die Infrastruktur dahinter aussieht.

Und wenn das inklusive Anzeige ist, dann sowieso nicht. Aber auch da kommts darauf an, was das für eine Infrastruktur und Architektur ist.

Ich bin aber da generell der Meinung das niemand 100.000 Datensätze in einem Grid sehen muss, weil man damit sowieso nichts machen kann.

08.03.2012 - 14:11 Uhr

Du meinst zur Laufzeit zu einem bestehenden Grid hinzufügen?

Das DataGrid kann Spalten automatisch erzeugen, das funktioniert einwandfrei.

Versteh sonst die Anforderung nicht ganz ...

08.03.2012 - 13:50 Uhr

Wir haben in unserer Solution 148 Projekte und verschwunden ist da noch nie eines.

Man muss aufgrund der Build-Komplexität dann schon mal auf direkte Verweise auf Projekte verzichten und gezielt DLLs einbinden und Build-Reihenfolgen festlegen, aber verschwunden bzw. Referenzenen gebrochen sind noch nie.

EDIT:
Kann es sein, dass ihr euch beim Arbeiten gegenseitig was falsches eincheckt oder überschreibt.
a) Wenn einer im Projekt A eine Referenz auf Projekt B eincheckt, aber das Projekt B nicht, dann gibts bei A natürlich einen Fehler
b) Wenn dann einer Projekt B eincheckt der nächste aber Projekt A ohne den neuen Verweis eincheckt (fälschlicherweise überschrieben), dann ist zwar Projekt B da, aber der Verweis von A auf B verschwunden.

Im VS selbst würde ich bei der Anzahl von Projekten kein Problem sehen. Ich hab mal wo gelesen, dass irgendwo um die 320 Projekt Schluss wäre.

08.03.2012 - 13:46 Uhr

hm, liegt glaube ich an der Klasse die du verwendest. Hab das mal kurz so ausprobiert:

<StackPanel>
    <ComboBox x:Name="cmbItems" VerticalAlignment="Top" HorizontalAlignment="Stretch" ItemsSource="{Binding MyControls}" >
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
    <StackPanel>
        <Border x:Name="brd"/>
    </StackPanel>
</StackPanel>
public TestLabView()
{
    InitializeComponent();

    MyModel model = new MyModel();

    model.MyControls = new ObservableCollection<UIElement>();

    model.MyControls.Add(CreateBorder(Colors.Blue, "Blue"));
    model.MyControls.Add(CreateBorder(Colors.Red, "Red"));

    this.DataContext = model;
    cmbItems.SelectionChanged += new SelectionChangedEventHandler(cmbItems_SelectionChanged);
}

private void cmbItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    brd.Child = (UIElement)cmbItems.SelectedValue;
}

private static Border CreateBorder(Color color, string name)
{
    Border brd = new Border();
    brd.Name = name;
    brd.Width = 100;
    brd.Height = 200;
    brd.Background = new SolidColorBrush(color);
    return brd;
}

da wird bei der Auswahl eines Items der Text angezeigt. Evtl. könntest du auch mal probieren auf der Combobox den DisplayMemberPath zu setzen.

08.03.2012 - 13:20 Uhr

Betrifft: VS2010

Hat jemand von euch schon mal versucht das Context-Menü des Solution Explorers um ein eigenes Command zu erweitern?

Ich versuche da grade was zu basteln und suche irgendwo ein vernünftiges HowTo.
Das Problem ist schon mal den richtigen Ansatz zu finden: VSPackage, Add-In, Extension oder VSCT (Visual Studio Command Tables). Warum die, warum jenes?.
Irgendwie gibts da im Internet viel und gleichzeitig nichts zu finden. Vor allem nichts um das einfach mal auszuprobieren, ein Tutorial halt.

Ich hab mir auch schon MME (Managed Menu Extensions) auf codeplex angesehen, was mich da stört, ist, dass man dann die eigene Erweiterung nicht einfach so wie eine VS-Extension installieren kann und das MME-Add-In installiert sein muss - und außerdem brauch ich mein Command nur im Context-Menü des Solution Explorers und nicht noch irgendwo im Menü vom Hauptfenster.

Hat da irgendjemand da schon mal was gemacht oder hat da ein paar gute Links wo ich in einer Stunde ein eigenes Command zusammenbringe?

Danke

02.03.2012 - 19:21 Uhr

puh danke ... man mag davon ausgehen, dass MS das auf der Download berücksichtigt, aber denkste ...

02.03.2012 - 19:01 Uhr

Ich wollte mal versuchen eine Extension fürs VS 2010 zu entwickeln, hab also hier angefangen:
Visual Studio Developer Center > Learn > Extend Visual Studio

dann das SDK downloaden:
Download Center: Microsoft Visual Studio 2010 SDK

nur kann ich das SDK gar nicht installieren ... siehe Anhang ... ?
Im Hintergrund mein installiertes VS.

Wie fang ich nun also an?

01.03.2012 - 17:09 Uhr

Funktioniert, soweit ich über SQL CE Bescheid weiß, auch nur, wenn du es schaffst die Datenbank als reine Daten-Halle zu verwenden. Sobald du irgendwo Logik in die DB auslagerst (Prozeduren, Views) etc. geht das nicht mehr.

CE zu verwenden funktioniert meines Erachtens nur sehr bedingt für eher kleine Projekte.

28.02.2012 - 16:35 Uhr

Ich sag mal da musst du etwas mehr investieren. du kannst aus den Daten 1,3,3,3,5,5 nicht die Zeilen 1,2,3,4,5 erzeugen. Dazu müsstest du dir erst eine (temporäre?) Tabelle mit der richtigen Schrittweite erzeugen und dann deine Daten per LEFT JOIN anhängen.

28.02.2012 - 16:24 Uhr

Ich versteh noch nicht ganz das Problem. Meinst du die Sprünge in der ersten Spalte also z.B. 40.0, 40.1, 40.7? Diese Sprünge hast du in der anderen Tabelle auch, das liegt aber wohl einfach daran, dass du im Bereich 40.2 bis 40.6 keine Daten hast.

Schon mal überprüft?

Edit: ich bin mir auch nicht ganz sicher, ob dein Statement überhaupt einen Sinn hat. Im Endeffekt lieferst du nur die Anzahl jeder Ausprägung von IOut, wobei die Ausprägung die erste Spalte darstellt und die 2. spalte nur die erste spalte + 0.2 ist. Im Grunde kannst du eigentlich auch die ganze Rumrechnerei weglassen, weil du ja sowieso nur IOut und IOut + 0.2, und die dazugehörige Anzahl lieferst.

28.02.2012 - 13:53 Uhr

Hier ein kleines Beispiel:

DECLARE @Name nvarchar(255)
DECLARE @Column nvarchar(64)
DECLARE @stmt nvarchar(1024)
SET @Column = 'Nachname'

SET @stmt = 'SELECT TOP 1 @ReturnValue = ' + @Column + ' FROM V_Mitarbeiter WHERE Mitarbeiter_ID = @Mitarbeiter_ID'
execute sp_executesql  @stmt, N'@ReturnValue nvarchar(1024) OUTPUT, @Mitarbeiter_ID int', @ReturnValue = @Name output, @Mitarbeiter_ID = 3304
SELECT @Name

wichtig ist die Angabe von "Output" in der Parameter-Definition UND in der Übergabe

15.02.2012 - 10:45 Uhr

Interessant trotzdem, dass du da keine Exception bekommen hast, oder hast du uns irgendwo ein Try/Catch unterschlagen ... ?

15.02.2012 - 09:49 Uhr

Was genau funktioniert daran eigentlich nicht? Bekommst du irgendwelche Fehler oder welches nicht erwartete Ergebnis erhältst du?

15.02.2012 - 08:50 Uhr
private ICalcService Service
{
    get
    {
        if (_channel == null)
        {
            var serviceFactory = new ChannelFactory<ICalcService>(
                new NetTcpBinding(), "net.tcp://localhost:54000");
            _channel = serviceFactory.CreateChannel();
        }
        return _channel;
    }
}
 
private void Good_Click(object sender, RoutedEventArgs e)
{
    try
    {
        ICalcService service = this.Service;
        int result = service.CalcHalf(16);
        txtResult.Text += "Result: " + result;
    }
    catch (Exception ex)
    {
        txtResult.Text += ex.ToString();
    }
}
 
private void Bad_Click(object sender, RoutedEventArgs e)
{
    try
    {
        ICalcService service = this.Service;
        dynamic dynArgs = new DynamicDictionary();
        dynArgs.ID = 16;
        txtResult.Text += "Parameter: " + dynArgs.ID;
        int result = service.CalcHalf(dynArgs.ID);
        txtResult.Text += "Result: " + result;
    }
    catch (Exception ex)
    {
        txtResult.Text += ex.ToString();
    }
}

Programmablauf: Eine WPF-Applikation hostet ein Service in einem eigenen Thread. Das Service (ICalcService) hat 2 Methoden: CalcHalf(int) und Negative(bool). Das MainWindow hat 2 Buttons "Good" und "Bad". In den _Click-Methoden der Buttons wird ein Channel zum Service instanziert und dann die Methode CalcHalf aufgerufen. Die ganze Solution gibts hier zum downloaden: ProxyProblem.zip

Wenn man das auf einer 64bit Maschine (Win7) im VS2010 startet, funktionieren beiden Buttons ohne Probleme. Im TaskManager aber erkennt man, dass die App eigentlich als 32bit App gestartet wird. Startet man diese nun direkt (aus bin\Debug) sodass sie als 64bit-App läuft, funktioniert der Good-Button noch, beim Bad-Button aber friert die Applikation ein. CPU läuft hoch und Speicher wird ohne Ende verbraucht.

Ich habe dann festgestellt, dass der Aufruf CalcHalf mit dem Wert aus dem dynamischen Objekt nicht funktioniert (siehe Unterschied Good und Bad). Da hab ich mir also gedacht, das dynamic-Object kann für TryGetMember die Member-Infos nicht auflösen, da diese von einem TransparentProxy (WCFService) kommen. Ich hab also den Aufruf auf: service.CalcHalf(**(int)**dynArgs.ID); geändert. App als 64 bit starten: Funktioniert!

Ich hab da aber auch noch eine zweite Methode Negative(bool) die im 64bit Modus natürlich prima funktioniert wenn man Negative(true) oder Negative(false) oder Negative((bool)dynArgs.SomeBoolValue) aufruft.

Ich habe aber auch probiert Negative(dynArgs.ID == 16) aufzurufen, weil ich mir dachte, eigentlich sollte klar sein, dass da ein Bool kommen muss, hab aber übersehen, dass das Bool ja erst das Result ist, das dynamicObject also wieder nicht wirklich herausbekommen kann was es für einen Typ liefern soll (oder sollte es beim Vergleich mit 16 wissen, dass ein int gefordert ist?).

Dann habe ich folgenen CodeBlock eingebaut:

public bool MethodUsingBool(bool value)
{
    return value;
}
...
var boolValue = MethodUsingBool(dynArgs.ID == 16);
bool result = service.Negative(boolValue);

Der Wert aus dem dynamicObject wird also schon ermittelt, bevor die Methode des Services aufgerufen wird, allerdings funktioniert der Aufruf immer noch nicht. Das Programm friert beim Aufruf der ServiceMethode wie vorher ein.
Ich hab dann mal

var boolValue = true;
bool result = service.Negative(boolValue);

probiert und das hat funktioniert.

Ich bin jetzt an einem Punkt angelangt, wo ich nicht mehr weiß, warum manches funktioniert und manches nicht. Zumal alles einwandfrei funktioniert, wenn man es als 32bit App ausführt.

Das ist ein Crosspost aus der MSDN, da aber keine Antworten gekommen sind, poste ich es hier auch nochmal in der Hoffnung hier hilfe zu bekommen: MSDN Eintrag

08.02.2012 - 15:58 Uhr

Schau dir das mal an:
http://snoopwpf.codeplex.com/

Damit solltest du zum kompletten Visual Tree kommen

07.02.2012 - 16:44 Uhr

Zum Aufbau:
Ich würde das Einfach mit einer Reihe von Stackpaneln (Orientation Horizontal) aufbauen in einem Stackpanel (Vertical). Jedes inner Stackpanel stellt eine "Spalte" (X) dar. In das Stackpanel kommen nacheinander Border mit der definierten Farbe und Größe (Y).

Stackpanel
  Stackpanel (A1)
     Border (rot), Border (gelb), Border (rot)
  Stackpanel (A2)
     Border (grün), Border (gelb), Border (grün), Border (grün)
  Stackapenl (B1)
...

Dann das ganze um 90 Grad drehen.

Mit dem Drag&Drop brauchst du dann den entsprechenden Border eigentlich nur mehr aus einem Stackpanel in ein anderes verschieben.

13.01.2012 - 12:05 Uhr

Ja, aber der Returnwert erwartet mindestens wieder ein T und nicht Control. Daher musst du die Variable "control" - wovon du ja sicher sagen kannst, dass es ein T ist (weils du's ja auch so erstellst), auch wieder auf T zurückcasten.

Fraglich ist für mich, warum du das Control dass du als T erstellst auf ein Control zurückcastest ... wird wohl dann im weiteren Code liegen.

EDIT:
Da du die Variable control als "Control" erstellst, könnte diese Variable auch vom Typ "X : Control" sein. Eine Variable vom typ "X" kannst du aber nicht zurückgeben, weil ja "T" erwartet wird.
Wenn du dir also beim return sicher sein kannst, dass die Variable nur vom Typ T sein kann, kannst du das auch casten. Wenn sie es nicht ist, sondern z.B. X, kriegst du dann sowieso an der Stelle eine InvalidCastException (zur Laufzeit).

Eventuell könntest du die Funktion ändern, sodass der Returnwert nur "Control" wäre.

12.01.2012 - 14:50 Uhr
<Window 
    x:Class="WPFMemoryUsage.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <StackPanel Orientation="Horizontal">
            <TextBlock>Memoryusage:</TextBlock>
            <TextBlock x:Name="lblMemoryUsage"></TextBlock>
            <Button x:Name="btnGetMemoryUsage" Click="btnGetMemoryUsage_Click">Recalculate</Button>
        </StackPanel>
    </StackPanel>
</Window>
private void btnGetMemoryUsage_Click(object sender, RoutedEventArgs e)
{
   System.GC.Collect();
    System.GC.WaitForPendingFinalizers();
    System.GC.Collect();
    using (Process process = Process.GetCurrentProcess())
    {
        double value = process.WorkingSet64 / 1024.0 / 1024.0;
        lblMemoryUsage.Text = value.ToString("#.000 MB");
    }
}

Wenn ich ein paar mal auf den Button klicke, merke ich einen Anstieg des Speicherverbrauchs, obwohl das Programm ja augenscheinlich nicht mehr verbraucht ... Irgendann machts dann einen Sprung und der Verbraucht geht wieder runter, aber nicht mehr zu dem Wert ganz zu Beginn ...

und auch wenn ich den GC etwas Feuer mache, es werden nur die Sprünge etwas kleiner.

Wenn ich eine Anwendung mit dem oben gezeigten Quellcode im Release erstelle und dann die .exe starte, verbraucht die etwa 33MB (ich mein allein das ist schon ein Wahnsinn). Wenn ich dann eine Minute, alle 20 sekunden auf den Button drücke, ohne die Maus zu bewegen, dann hab ich nach etwa 4 mal klicken 1 MB mehr verbraucht. Für was?

Wenn ich blöd mit der Maus im Fenster herumfuchtle ist auch gleich fast ein MB ...

Welche internen Sachen verbraucht da die WPF und was kann ich alles abdrehen um den Speicherverbrauch zu optimieren?

11.01.2012 - 15:40 Uhr

Ich würde es in etwa so machen:

Init()
{
    _anyBoxChanged = false;
    foreach(TextBox box in groupBox1.Controls)
    {
        box.TextChanged += new EventHandler(TextChanged)
    }
}


TextChanged()
{
    // irgendeine Box wurde geändert
    _anyBoxChanged = true;
}
14.12.2011 - 11:52 Uhr

Man kann noch nicht mal ganz einfach deutsche und österreichische Jobs bzw. primär die Gehälter vergleichen. Andere Abgaben, andere Steuern, 13. und 14. Monatsgehalt etc.

09.12.2011 - 12:13 Uhr

PS dazu:
Wenn das eine von dir erstellte Datenbank/Tabelle ist, würde ich die Spalte gleich mal umbenennen. Das wird dir sonst in Zukunft auch noch irgendwo Probleme bereiten.

09.12.2011 - 10:50 Uhr

hm, also rein auf Verdacht würde ich mal die ' beim Insert vom Index wegnehmen, wenn die Index-Spalte ein Int-Wert ist.

Fraglich ist für mich ob im Insert die Variable "datenbankName" wirklich der Datenbankname ist, oder vielmehr der Tabellenname?

01.12.2011 - 17:06 Uhr

der Fehler wird glaube ich relativ häufig gemacht, evtl. sollte mal einer die Convert Methode umschreiben 😉

04.11.2011 - 18:40 Uhr

habs noch etwas genau ausgedrückt. Ich hätte gern 3:7 und wenn die 3* < 80 sind, dann 80:*

04.11.2011 - 18:03 Uhr

das ist für mich keine Lösung. Du gehst zusehr von Beispiel aus. Im realen Programm sind die verhältnisse etwas anders, das minheight ist dann 150 etc.

Die Aufgabenstellung lautet also:
Wie kann ich in einem festen Rahmen, 2 weitere Rahmen im Verhältnis 3:7 anzeigen, wobei der kleinere nicht kleiner werden darf als x. Wenn die Inhalt der beiden Rahmen sich nicht ausgehen, müssen Scrollbalken angezeigt werden.

Im Moment find ich dazu keine Lösung, außer das Verhältnis manuell zu rechnen.