Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Xqgene
Thema: Beziehung zwischen Objekten beim Laden der Objekte wiederherstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

da bin ich wieder.

also, der Surrogat Vorschlag ist zwar interessant, löst aber nicht wirklich mein Problem. ich habe jetzt eine "Benachrichtigungs"-Lösung gebastelt.

Objekte (Personen in dem Beispiel von oben) registrieren sich bei einem "Creator" mit einer bestimmten Benachrichtigungsbedienung. Ist beim Erstelle eines Objektes diese Bedienung erfüllt (z.b. Id des Objektes stimmt überein), wird das registrierte Objekt darüber benachrichtigt.

Thema: Beziehung zwischen Objekten beim Laden der Objekte wiederherstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

ich suche nach "bester" Lösung für folgendes Problem.

Es gibt ein Objekt Person. Dieses Objekt enthält Beziehungen zu anderen Person Objekten.

class Person {
  ind id;
  List<Person> children;
  List<Person> parents; 
}

die Objekte werden in eine XML Datei gespeichert. etwa so:

<xml>
  <Person>
    <id>1</1>
    <Children>
      <Person id="3" />
      <Person id="4" />
    </Children>
    <Partens>
      <Person id="2" />
    </Partens>
  </Person>
  <Person>
    <id>2</1>
    <Children>
      <Person id="1" />
    </Children>
  </Person>
  <Person>
    <id>3</1>
    <Partens>
      <Person id="1" />
    </Partens>
  </Person>
  <Person>
    <id>4</1>
    <Partens>
      <Person id="1" />
    </Partens>
    <Children>
      <Person id="5" />
    </Children>
  </Person>
  <Person>
    <id>5</1>
  </Person>
</xml>

Und später wieder geladen.
Und genau hier steckt mein Problem. Ich suche also effektivste Möglichkeit die Objekte aus der XML Datei zu laden und die Beziehung herzustellen. Wenn ich zuerst alle Person Objekte erstelle und dann aus der Liste die children und parents suche, mache ich unter Umständen mehrere Durchläufe, biss alle Beziehungen hergestellt sind.
Wenn ich gleich alle Beziehungen herstelle, dann muss ich durch die XML Datei hin und her springen.
Noch 'ne Möglichkeit wäre, dass ein Person Objekt über Erzeugung eines anderen Objektes informiert wird und fügt den dann bei bedarf zu seinen Beziehungen hinzu.

Oder noch weitere Vorschläge?

Thema: Ist DependencyProperty gesetzt?
Am im Forum: GUI: WPF und XAML

Egal ist es leider nicht. wenn eine Eigenschaft nicht gesetzt ist wird, diese aus einem Parent Element ermittelt. Z.B. Wenn FontSize in dem Run Objekt nicht gesetzt ist wird diese von TextBlock genommen. Sobald die Eingenschaft gesetzt ist, gilt diese für Darstellung etc.

Reflection ist aus Performance Günden kommt als allerletzte Möglichkeit in Betrachtung.

Bleibt also die HashSet Variante.

Thema: Ist DependencyProperty gesetzt?
Am im Forum: GUI: WPF und XAML

Wie kann man in nach hinein feststellen, ob eine DependencyProperty gesetzt wurde?
Also, ob ein Wert zugewiesen wurde?

Konkret geht es mir darum ein Run-Objekt zu kopieren. Es sollen nur die Eigenschaften kopiert werden, die auch wirklich gesetzt wurden.

Thema: WP7: RichtextBox zeigt den Text nicht komplett
Am im Forum: GUI: WPF und XAML

@All: Seraph2402 hat mich auf die Lösung gebracht. Diese besteht darin, dass wenn der Text in der TextBox komplett (unter 2000 px) passt, wird der Text in mehrere Teile gesplittet und in einzelne Controls zugewiesen.

Sieh auch hier: http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx

Thema: WP7: RichtextBox zeigt den Text nicht komplett
Am im Forum: GUI: WPF und XAML

@Seraph2402: Also das mit 2000px klingt plausibel. 2000px konnte es durchaus sein.

Nun wie geht man das Problem um? Richtextbox soll doch mal ein komplettes File zeigen können. Ist absolut unverständlich :(

@winSharp93: ohne ScrollViewer habe ich schon mal probiert. Dabei wird gar nicht mehr gescrollt.

Thema: WP7: RichtextBox zeigt den Text nicht komplett
Am im Forum: GUI: WPF und XAML

Also die RichtextBox scrollt schon. Wobei es wohl das ScrollViewer scrollt und nicht die RichtextBox selbst. Das Problem ist eben, dass der Inhalt der RichtextBoxnicht zu Ende angezeigt wird. Beim Scrollen kommt man nach ca. einem Drittel zu einem Punkt wo man die RichtextBox nicht mehr zu sehen ist. wobei man noch weiter runter scrollen kann.

ich habe ein Beispielprojekt angehängt um mein Problem zu verdeutlichen.

Zitat
...und/oder die RichtextBox aus dem Scope der ScollBar zu entfernen.
das habe ich jetzt nicht ganz verstanden..?


Ich will an der Stelle nochmal drauf hinweisen, dass es sich um eine WP7 Anwendung handelt.

Thema: WP7: RichtextBox zeigt den Text nicht komplett
Am im Forum: GUI: WPF und XAML

Hallo,

ich habe ein Problem mit Anzeige einer Textdatei in einer RichtextBox in einer WP7 App.
Der Text wird einfach nicht ganz angezeigt. Vielleicht nur 10% der ganzen Datei.

XAML ist ganz einfach:


 <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel enthält den Namen der Anwendung und den Seitentitel-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MEINE ANWENDUNG" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Seitenname" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - zusätzliche Inhalte hier platzieren-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ScrollViewer VerticalScrollBarVisibility="Auto" >
                <RichTextBox Name="richTextBox" />
            </ScrollViewer>
        </Grid>
    </Grid>

und befüllen:


 RichTextBox _tb = richTextBox;
string _t = _be.Data.ToString();  // Text aus der Textdatei
Run _r = new Run();
_r.Text = _t.Trim();
Paragraph _pr = new Paragraph();
_pr.Inlines.Add(_r);

_tb.Blocks.Add(_pr);

Meine Suche nach der Ursache ergab leider keine Lösung.

Thema: DataGridTemplateColumn dynamisch binden
Am im Forum: GUI: WPF und XAML

Hi,

ich habe letztendlich mich damit abfinden müssen, Template zur Laufzeit im Code zu erstellen.

so etwa:


    public class DateColumnBuilder : BaseColumnBuilder
    {
        protected override DataGridColumn OnBuildColumn()
        {
            if (this.ValueConverter != null)
                if (!Application.Current.Resources.Contains(this.ValueConverter.ToString()))
                    Application.Current.Resources.Add(this.ValueConverter.ToString(), this.ValueConverter);
            
            DataGridTemplateColumn column = new DataGridTemplateColumn();

            // template for column cell editor
            string template = string.Format(@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                                                <DatePicker BorderThickness=""0"" SelectedDate=""{{Binding Path=[{0}]}}"" /></DataTemplate>", this.Field);
            column.CellEditingTemplate = (System.Windows.DataTemplate)XamlReader.Parse(template);

            // template for column cell
            template = string.Format(@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                                        <TextBlock HorizontalAlignment=""Right"">
                                            <TextBlock.Text>
                                                <Binding Converter=""{{StaticResource XXX.XXX.DateConverter}}"">
                                                    <Binding.Path>[{0}]</Binding.Path>", this.Field);
            if (!string.IsNullOrEmpty(this.Format))
            {
                template += string.Format("<Binding.ConverterParameter>{0}</Binding.ConverterParameter>", this.Format);
                if (this.ValueConverter != null)
                    template += string.Format("<Binding.StringFormat>{0}</Binding.StringFormat>", this.Format);
            }
            template += "</Binding></TextBlock.Text></TextBlock></DataTemplate>";
            column.CellTemplate = (System.Windows.DataTemplate)XamlReader.Parse(template);

            return column;
        }
    }

Thema: DataGridTemplateColumn dynamisch binden
Am im Forum: GUI: WPF und XAML

Hi,

Ich komme beim folgenden Problem leider nicht weiter.

Im Programm werden Spalten dynamisch erzeugt. Diese Spalten sollen Werte anzeigen, die in einer Config-Datei definiert werden. DataTemplate sieh eigentlich ganz einfach aus


<DataTemplate x:Key="ColumnTemplate">
         <TextBox BorderThickness="0"/>
</DataTemplate>

Die werte sollen also in der TextBox angezeigt werden. Mein Problem ist nun, wie binde ich die TextBox an meine Daten Quelle?

DataTemplate wird aus eine Ressource-Datei geladen.
Daten Objekt sieht etwa so aus


class DataObject
{
  object this[string propName] { get; set; }
}

wenn ich DataTemplate z.B. etwa so verändere

<DataTemplate x:Key="ColumnTemplate">
         <TextBox BorderThickness="0" Text="{Binding Path=[Status]}"/>
</DataTemplate>

wird Status angezeigt.
Das ist aber gerade mein Problem, dass ich nicht weiß welche Eigenschaften ein Objekt besitzt.

vllt. ist das auch ganz einfaches Problem, für WPF-Profis wie euch :)

Thema: Datagridview - neue Spalte mit 3 Buttons
Am im Forum: GUI: Windows-Forms

das geht schon.

du muss aber ein wenig was dafür tun.

du muss eine eigene Implementierung für DataGridViewCell, DataGridViewColumn und IDataGridViewEditingControl schreiben

im Prinzip ist es nicht nicht sehr kompliziert, auch wenn etwas zeitraubend.

es gibt auch viele Beispiele für so eine Implementierung. einfach mal nach "Custom DataGridView Column" suchen.

für kleine Tipps kann du auch mich ruhig fragen.

Thema: [FAQ] Automatisches Vergeben der Revisions- und Buildnummer
Am im Forum: FAQ

Ich hatte schon längere Zeit vor, mein Visual Studio so zu konfigurieren, dass die Revision und Build in der AssemblyInfo.cs automatisch vergeben werden.
Die Build soll einfach hochgezählt werden, die Revison soll aus Subversion übernommen werden.
Nach „langer“ Suche, unter anderem auch hier im Forum, habe ich unten beschriebene Lösung "zusammengefunden". (An der Stelle sei erwähnt, dass ein paar Tipps von JuyJuka kamen.)
Ich dachte, dass meine Sucherei vielleicht jemandem noch nützt. in Form eines FAQ Beitrages, o.ä.
Die Beschreibung ist etwas größer geworden als ich dachte. Also Korrekturlesen wäre ganz angebracht.

Meine Umgebung:
- VS 2008/VS 2010 RC
- Subverion 1.6.9 (im Netzwerk, keine Lokale Installation)

Subversion Version soll dabei eigentlich keine Rolle spielen. Zumindest habe ich bei meiner Recherche diese gar nicht beachtet.

Versionsnummer soll im Format Major.Minor.Revision.Build erzeugt werden.
(nicht MS Format: Major.Minor.Build.Revision )

Als erstes muss man MSBuild Community Tasks installieren. Diese kann man von http://msbuildtasks.tigris.org/ runterladen. MSBuild Community Tasks ist Ansammlung von verschiedenen Tools, welche man in den Build Prozess einbinden kann.
Uns interessieren dabei nur drei der vielen nützlichen Tasks: Version, SvnVersion und AssemblyInfo

Version-Task hilft die Buildnummer des Projektes zu zählen, mit Hilfe von SvnVersion-Tasks werden wir die Revision des Projektes aus Subverion auslesen. AssemblyInfo erstellt dann eine AssemblyInvo.cs Datei mit den Versionsinformationen.

Nachdem die MSBuild Community Tasks installiert sind, muss man prüfen, ob ein SvnClient auf dem Rechner vorhanden ist. Diesen braucht man wegen der svnversion.exe. svnversion.exe wird von SvnVersion-Task benutzt, um wie oben bereits beschrieben, die Revision zu ermitteln. Wenn Subversion lokal installiert wurde, dann ist die svnversion.exe (ohne Gewähr ;) ) bereits vorhanden. Wenn nicht dann soll jetzt ein SvnClient drauf. Ich habe z.B. Silk Subverion Client benutzt (http://www.sliksvn.com/)

Nun wenn alle Voraussetzungen geschaffen sind, kommen wir zum nächsten Abschnitt: Anpassen der Projekt-Datei.

Man öffnet die C#-Projekt-Datei (*.csproj) in einem Text-Editor und geht ans Ende. Sieht etwa so aus (VS 2010)

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

Zuerst muss man VisualStudio anweisen, die MSBuild Community Tasks zu benutzen. Dafür fügt man folgende „Anweisung“ ein

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"        
        Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"/> 

gleich unter der Zeile
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Attribut “Project” zeigt, wo die Community Tasks sich befinden (Standardinstallation)
“Condition” sorgt dafür, dass Projekt geladen werden kann, auch wenn die Community Tasks nicht installiert sind.
Im nächsten Schritt sorgen wir dafür, dass die Build-Nummer automatisch um eins erhöht wird.
Dafür ist Version-Task zuständig. Version-Task speichert in einer Datei die letzte Versionsnummer und erhöht die Build-Nummer bei jedem Aufruf um eins.
<Target Name="Version">
    <Version VersionFile="version.txt" RevisionType="Increment">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version> 
</Target>

VersionFile gibt den Namen der Datei an, in der die Version gespeichert wird. Beim ersten Ausführen, wird eine neue Datei erstellt und Version 1.0.0.0 gespeichert. Zweite Ausgabe wäre dann 1.0.0.1, dann 1.0.0.2 usw.
RevisionType=“Increment“ bedeutet, dass die letzte Stelle (Revision nach MS Standard) der Versionsnummer inkrementiert wird.
Damit Projekt beim Kompilieren nicht angemeckert wird (wegen fehlender CommunityTasks), soll man eine Bedingung auch hier eingeben
Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"
Nach dem Ausführen des Version-Tasks sind Major, Minor, Build und Revision Variablen gesetzt und können weiter, z.B. durch andere Tasks, benutzt werden.

Nächster Part sorgt dafür, dass die Revisionsnummer aus SVN ausgelesen wird und erstellt eine AssemblyInfo.cs Datei.
<Target Name="AssemblyInfo"
        Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')">
    <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\SlikSvn\bin" 
	            Condition="Exists('$(ProgramFiles)\SlikSvn\bin\svnversion.exe')">
      <Output TaskParameter="Revision" PropertyName="Build" />
    </SvnVersion>

    <AssemblyInfo
      CodeLanguage="CS"
      OutputFile="Properties\AssemblyInfo.cs"
      AssemblyTitle="Title"
      AssemblyDescription="Description"
      AssemblyCompany="Company"
      AssemblyProduct="Product"
      AssemblyCopyright="Copyright © 2009"
      ComVisible="false"
      Guid="888ff638-9547-4480-9bf4-4fe25103b35c"
      AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)"
      AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"
      Condition="$(Revision) != '0'"/>
  </Target>

Bei dem SvnVersion-Task muss Pfad zu dem Verzeichnis mit der svnversion.exe Datei eigegeben werden. Condition sollte selbst erklärend sein.
Interessant ist der Output-Tag. Der besagt, dass der Wert der Eigenschaft „Revision“ des SvnVersion-Tasks in der Variable „Build“ gespeichert werden soll.

Nun kommt der AssemblyInfo-Task endlich ins Spiel. Dieser Tasks erstellt aus den gegebenen Informationen eine Assemblyinfo.cs. Die Felder sind soweit selbsterklärend. Wichtig ist, dass die GUID durch eine eigene ersetzt wird und sich bei den einzelnen Projekten NICHT wiederholt.
Interessante Stellen sind AssemblyVersion/AssemblyFileVersion Eingaben. Die Version wird durch Variablen, welche Version und SvnVersion-Tasks vorbereitet haben, zusammen gesetzt.

Nach dem alle Tasks definiert wurde, bleibt noch zu sagen, wann diese aufgerufen werden sollen. Die AssemblyIfo.cs Datei soll vor dem Erstellen des Projektes erzeugt werden. Deshalb wird der Aufruf der Tasks folgendermaßen angegeben.
<Target Name="BeforeBuild">
    <CallTarget Targets="Version" /> 
    <CallTarget Targets="AssemblyInfo" />
</Target>

Nun die vollständige Projektdatei könnte dann so aussehen
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.21022</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{ACF93EAD-62EF-4614-AEF4-45B6971957EF}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>WindowsFormsApplication2</RootNamespace>
    <AssemblyName>WindowsFormsApplication2</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <FileUpgradeFlags>
    </FileUpgradeFlags>
    <UpgradeBackupLocation>
    </UpgradeBackupLocation>
    <OldToolsVersion>3.5</OldToolsVersion>
    <PublishUrl>publish\</PublishUrl>
    <Install>true</Install>
    <InstallFrom>Disk</InstallFrom>
    <UpdateEnabled>false</UpdateEnabled>
    <UpdateMode>Foreground</UpdateMode>
    <UpdateInterval>7</UpdateInterval>
    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
    <UpdatePeriodically>false</UpdatePeriodically>
    <UpdateRequired>false</UpdateRequired>
    <MapFileExtensions>true</MapFileExtensions>
    <ApplicationRevision>0</ApplicationRevision>
    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
    <IsWebBootstrapper>false</IsWebBootstrapper>
    <UseApplicationTrust>false</UseApplicationTrust>
    <BootstrapperEnabled>true</BootstrapperEnabled>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xml.Linq">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data.DataSetExtensions">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Class1.cs" />
    <Compile Include="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
      <DesignTime>True</DesignTime>
    </Compile>
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
      <Visible>False</Visible>
      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
      <Install>false</Install>
    </BootstrapperPackage>
    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
      <Visible>False</Visible>
      <ProductName>.NET Framework 3.5 SP1</ProductName>
      <Install>true</Install>
    </BootstrapperPackage>
    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
      <Visible>False</Visible>
      <ProductName>Windows Installer 3.1</ProductName>
      <Install>true</Install>
    </BootstrapperPackage>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- import MSBuildCommunityTasks -->
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" 
          Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"/>
  <!-- to manage version number -->
  <Target Name="Version"
		  Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')">
    <Version VersionFile="version.txt" RevisionType="Increment">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
      <Output TaskParameter="Build" PropertyName="Build" />
    </Version> 
  </Target>
  <!-- to generate our personnal version info -->
  <Target Name="AssemblyInfo" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')">
    <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\SlikSvn\bin" 
	            Condition="Exists('$(ProgramFiles)\SlikSvn\bin\svnversion.exe')">
      <Output TaskParameter="Revision" PropertyName="Build" />
    </SvnVersion>

    <AssemblyInfo
      CodeLanguage="CS"
      OutputFile="Properties\AssemblyInfo.cs"
      AssemblyTitle="Test-WindowsFormsApplication"
      AssemblyDescription="Beispiel für Verwendung der MSBuild Tasks"
      AssemblyCompany="Ich"
      AssemblyProduct="WindowsFormsApplication2"
      AssemblyCopyright="Copyright © 2010"
      ComVisible="false"
      Guid="3AEEC92E-C260-4DD2-8F6D-790182F14CFE"
      AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)"
      AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"
      Condition="$(Revision) != '0' "/>
  </Target>

  <Target Name="BeforeBuild">
    <CallTarget Targets="Version" /> 
    <CallTarget Targets="AssemblyInfo" />
  </Target>
  <Target Name="AfterBuild">
  </Target>
</Project>

Die erzeugte Datei sieht dann, wie im Beispiel unten aus. Wictig ist, dass man die erzeugte AssemblyInfo Datei nicht manuell bearbeitet, denn sie wird bei jedem Build-Vorgang überschrieben.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30128.1
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[assembly: AssemblyTitle("Test-WindowsFormsApplication")]
[assembly: AssemblyDescription("Beispiel für Verwendung der MSBuild Tasks")]
[assembly: AssemblyCompany("Ich")]
[assembly: AssemblyProduct("WindowsFormsApplication2")]
[assembly: AssemblyCopyright("Copyright © 2010")]
[assembly: ComVisible(false)]
[assembly: Guid("3AEEC92E-C260-4DD2-8F6D-790182F14CFE")]
[assembly: AssemblyVersion("1.0.1.12")]
[assembly: AssemblyFileVersion("1.0.1.12")]


Als letzter Strich, sollte man die entstandene "version.txt"-Datei auch zum Projekt hinzufügen. Damit wird die Datei auch in die Subversion Datenbank aufgenommen. Das ist wichtig, damit beim öffnen des Projektes auf einem anderen Rechner, die Build-Zählung nicht wieder von Vorne beginnt, sondern fortgesetzt wird.

Thema: Evely Todo-Manager v2
Am im Forum: Projekte

Zitat
Kann man das noch einbauen, dass in den Anwendungs-Einstellungen eine Möglichkeit besteht, die Defaultschrift für den Notiz-Bereich zu konfigurieren?

wenn du ein wenig erläuterst, was du dir dabei so vorstellst?

Zitat
Ansonsten gefällt mir das Ganze sehr gut. Zuerst ist die Bedienung zwar ein bisschen gewöhnungsbedürftig, aber da kommt recht schnell rein.

was meinst du mit gewöhnungsbedürftig? ich könnte vllt. auch an der Stelle was ändern.

Thema: Visual Studio 2010 has been released!
Am im Forum: Szenenews

@Kani und @Schlopp ist schon komisch... ich meine, ich hätte schwören können, dass ich eine x64 RC Version bei mir installiert habe. und jetzt finde ich nicht mal die Image Datei dazu. ich drehe wohl langsam durch 8o =)

Thema: Visual Studio 2010 has been released!
Am im Forum: Szenenews

was mich wundert, ist dass es keine x64 version (noch) gibt. weiss jemand ob und wann sie kommt? oder bin ich einfach blind u d sehe es nicht?

Thema: DesktopSave
Am im Forum: Projekte

ich finde, es ist eine super idee. wenn noch mit der wiederanmeldung und trayicon dazu kommt, dann ist es nahezu perfekt. :)

Thema: Form in Form "halten"
Am im Forum: GUI: Windows-Forms

Das was du suchst nennt man MDI: Creating MDI Child Forms
und Creating MDI Parent Forms

Thema: Evely Todo-Manager v2
Am im Forum: Projekte

@talla, TBR: peinlicher Fehler X(. Korrigiert.

@CSL: weil dein Bericht so ausführlich war

Zitat von TBR
Vorab: Wahnsinn! Sieht ja genial aus! Sind das alles eigene Controls? ..

Danke, die meisten Controls sind von mir, bzw. von mir angepasst.

Thema: Evely Todo-Manager v2
Am im Forum: Projekte

Wieder ein Update (2.0.3715.34978)

04.03.2010:

  • Korrekturen in der Lokalisierung
  • Neue Option: Verhalten beim Ändern der Fälligkeit.
    Beim Ändern der Fälligkeit wird die Änderung optional auf die Unteraufgaben übertragen
  • Bestätigung beim Löschen eines Filters
  • Schließen eines Tabs durch mitlere Maustaste
  • Contextmenu für Tabs mit Schließbefehlen.
  • Button (x) zum Schließen des aktiven Tabs in der Tableiste
  • Drag and Drop in der Tab-Leiste (Tab-Anordnung ändern: Alt+linke Maustaste)
  • Einstellungen für die Startseite
  • Darstellung der Aufgaben in der Liste nach unterschiedlichen Kriterien anpassbar.
    Kriterien können über Konfiguration festgelegt werden.
  • FIX: Wenn man eine Aufgabe zu/auf klappt wird die in Editiermodus versetzt
  • FIX: Kategorie kann nicht gelöscht werden aus einer Aufgabe (Aufgabe ohne Kategorie)
  • Rahmen im Edit-Modus
  • Funktion zum Duplizieren der Aufgaben
  • Sperren einer Todo-Datei beim Öffnen. Die Datei kann durch einen anderen Benutzer nochmal
    geöffnet werden. Es werden aber keine Änderungen gespeichert.
  • Speicherort für die Einstellungsdateien korrigiert.
    Aus ..AppData\Local\Evely Todo-Manager nach ..AppData\Roaming\Evely Todo-Manager


Hinweis: Wegen der Änderungen des Speicherorts für die Einstellungsdateien werden die alten eingerichteten Filter nicht mehr angezeigt. Wenn man seine alte Filter haben möchte, kann die Datei filters.xml aus dem alten Speicherort (s. Changelog) nach das neue kopieren.

@CSL: ich warte wieder auf deinen ausführlichen Bericht :)
(und natürlich von allen anderen auch)

Zitat von CSL
Ich finde das schlecht, irgendwie finde ich es komisch das eine nicht übersetzte Applikation nur Deutsch ist anstatt Englisch.

ich habe nie behauptet, dass die nicht übersetzt ist. zur zeit werden drei Sprachen "gepflegt". Standard Sprache dabei ist Englisch. Sprache der Anwendung wird durch die Sprache des BS festgelegt. Später baue ich noch eine Sprachauswahl in die Konfiguration ein.

Thema: Klassendesign: Interface, Container, Wrapper
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von herbivore
wobei du durch ein Interface nur erzwingen kannst, dass die Klasse etwas implementiert. Du kannst mit einem Interface nicht verhindern, dass zusätzlich etwas implementiert wird. Selbst wenn du im Interface nur get zu stehen hast, kann die Klasse trotzdem zusätzlich set implementieren.

das ist mir natürlich bewusst.

@winSharp93: über ein weiteres interface habe ich auch nachgedacht. mal sehen...

Thema: Klassendesign: Interface, Container, Wrapper
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

irgendwie stehe ich auf dem Schlauch.

Also es gibt folgendes Konzept: Interface


interface ISample
{
  int State { get; } 
}

und eine Wrapper-Klasse, welche dieses Interface implementiert.


class SampleWrapper : ISample
{
  public SampleWrapper(ISample managedObj) { ... }
  public int State { get { return managedObj.State; } }
}


Die Anwendung bekommt Daten (ISample) von einer externen Datenquelle. Die Wrapper-Klasse gewährleistet gleiche Logik für die Datenverarbeitung der ISample-Objekte, unabhängig davon, wie die Klasse intern aufgebaut ist. alle Objekte der Anwendung greifen also auf ISample-Objekte indirekt über SampleWrapper

nun zu meinem Problem, alle Klassen/Objekte die auf ein ISample-Objekt zugreifen dürfen die State-Eigenschaft nicht beschreiben. Alle außer der Wrapper-Klasse selbst.

thja... Ideen, wie ich das am elegantesten löse?

Thema: Evely Todo-Manager v2
Am im Forum: Projekte

Zitat von CSL
- Die Tabs, unter anderem Konfiguration sowie Filter Manager sind nur über das Projekt Menü schließbar, ist verwirrend, vor allem da Konfiguration ja kein Projekt ist
In nächstem Release implementiert: Schließen über mittlere Maustaste/Kontextmenü
Zitat
- Zuletzt geöffnet hat derzeit keine Funktion wenn die Applikation neu gestartet wird
was heißt das genau ????
Zitat
- Der untere Bereich minimiert nicht auf ein Minimum wenn alles zu geklappt wird
Dies ist mir bekannt. Kommt noch.
Zitat
- Man kann Unteraufgaben nicht mit der Tastatur auf und zu klappen
F12
Zitat
- Wenn man Unteraufgaben zu klappt werden will die Applikation die aufgabe darüber Editieren lassen
Fixed
Zitat
- Es ist alles Deutsch

Eh.. ist das gut oder schlecht? Es sind auch andere Sprachen geplant. Dabei brauche ich aber Unterstützung. Hättest du Lust dazu?
Zitat
- Im der Konfiguration sollte der Baum per Default aufgeklappt sein

Vermerkt.
Zitat
- Viel flackert ganz übel beim Resizen
8)
Zitat
- Wenn ich in der ComboBox oben etwas ein geben, (ich vermute das ist ein Filter) und Enter drücke, werden die Tasks gefiltert, das zurücksetzen des Filters funktioniert schlecht bis gar nicht
das ist ein Such-/Filterfeld. um Filter zu lösen, einfach das Feld leerer (markieren, ENTF)
Zitat
- Wenn ich Aufgaben auf klappe um ihre Unteraufgaben zu betrachten ist es wieder im Edit modus
- Wenn es nur eine Aufgabe gibt, und diese ist im Edit modus, kann man es nicht mit der Maus Read Only machen, nur die ESC Taste funktionierte
Fixed
Zitat
- Neustart der Applikation öffnet nicht automatisch die Listen die beim schließen verfügbar waren.
liegt daran, dass es noch gar nicht implementiert ist.
Zitat
- Es ist nicht deutlich genug wann immer gespeichert wird, es darf nicht gespeichert werden solange noch keine Undo Funktionalität zur Verfügung steht, sonst kann man sehr schnell seine Liste zerstören
Jede Änderung in der Liste wird sofort gespeichert. Dieses Verhalten gab's schon immer. ich weiß nicht ,ob ich noch was dran ändere. Die Undo/Redo Funktion habe ich auf meine Todo-Liste gesetzt

Zitat
..Nur im Edit-Modus gefällt es mir derzeit nicht, ich vermisse einen Rahmen.
Gibt's schon

Danke für den ausführlichen Feedback.

neuen Release werde ich diese spätestens nächste Woche zum Download freigeben.

Thema: Evely Todo-Manager v2
Am im Forum: Projekte

[email protected]

@Narnaja: ist geplant.

@M.Holder: Das Problem muss ich noch klären. Hat was mit dem internem Aufbau des Programms zu tun. Ich vergesse aber es nicht :)

Thema: Visual Studio 2010 Release Candidate ist da
Am im Forum: Szenenews

eine Ergänzung dazu: zur Zeit RC nur in englischer Fassung

Thema: Evely Todo-Manager v2
Am im Forum: Projekte

Hallo MagicAndre1981, DonMaxo und Mazo,

AddIn ist geplant so bald ich die größten Fehler beseitigt habe.

Thema: Suche Kalender Monatsansicht, Spalten: Tag, Wochentag, Anmerkung
Am im Forum: GUI: Windows-Forms

habe neulich gefunden: http://www.menendezpoo.com/

Thema: Datagrid Row from Mouse Position
Am im Forum: GUI: WPF und XAML

HitTest()

Thema: Evely Todo-Manager v2
Am im Forum: Projekte

Ein kleines Update

Changelog:
-------------------------------------
04.02.2010:

  • Startseite eingebaut
  • Korrekturen bei der Lokalisierung
  • Optimierung der Ressourcen
  • Kleine Änderungen in der GUI

Thema: FormCutter
Am im Forum: Projekte

Lustiges Tool!

auch wenn ich es nicht wirklich brauche, fällt mir spontan zwei Sachen die ich vermissen würde.

1. Dass man die Punkte hinzufügen könnte, so dass zwischen zwei Punkten noch ein platziert wird.

2. noch besser wäre eine Vorschau Funktion 8)

Thema: GlassForm / Aero-Effekt mit Windows® API Code Pack
Am im Forum: GUI: Windows-Forms

Von MysticEmpires beschriebenes Effekt kenne ich auch sehr gut. deshalb wundert es mich das bei talla es so gut geht.

@talla: welches VS/Framewok Version hast du für dein Bsp. genommen?