Laden...

Forenbeiträge von Xqgene Ingesamt 2.051 Beiträge

12.10.2012 - 23:37 Uhr

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.

05.10.2012 - 19:13 Uhr

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?

30.12.2011 - 17:18 Uhr

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.

30.12.2011 - 14:47 Uhr

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.

30.12.2011 - 14:18 Uhr

@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

12.12.2011 - 22:45 Uhr

@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.

08.12.2011 - 00:39 Uhr

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.

...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.

05.12.2011 - 21:34 Uhr

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.

21.04.2011 - 23:16 Uhr

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;
        }
    }

20.02.2011 - 22:47 Uhr

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 😃

25.05.2010 - 18:10 Uhr

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.

10.05.2010 - 13:58 Uhr

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.

15.04.2010 - 10:34 Uhr

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?

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.

13.04.2010 - 21:49 Uhr

@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 =)

13.04.2010 - 12:20 Uhr

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?

22.03.2010 - 01:45 Uhr

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

19.03.2010 - 00:27 Uhr

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

05.03.2010 - 17:12 Uhr

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

@CSL: weil dein Bericht so ausführlich war 🙂

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

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

04.03.2010 - 21:38 Uhr

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)

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.

25.02.2010 - 15:17 Uhr

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...

24.02.2010 - 18:12 Uhr

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?

16.02.2010 - 20:39 Uhr
  • 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ü

  • Zuletzt geöffnet hat derzeit keine Funktion wenn die Applikation neu gestartet wird

was heißt das genau ????

  • Der untere Bereich minimiert nicht auf ein Minimum wenn alles zu geklappt wird

Dies ist mir bekannt. Kommt noch.

  • Man kann Unteraufgaben nicht mit der Tastatur auf und zu klappen

F12

  • Wenn man Unteraufgaben zu klappt werden will die Applikation die aufgabe darüber Editieren lassen

Fixed

  • 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?

  • Im der Konfiguration sollte der Baum per Default aufgeklappt sein

Vermerkt.

  • Viel flackert ganz übel beim Resizen
  • 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)

  • 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

  • Neustart der Applikation öffnet nicht automatisch die Listen die beim schließen verfügbar waren.

liegt daran, dass es noch gar nicht implementiert ist. 🙂

  • 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

..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.

16.02.2010 - 12:28 Uhr

Hallo@all

@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 😃

09.02.2010 - 10:53 Uhr

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

07.02.2010 - 18:49 Uhr

Hallo MagicAndre1981, DonMaxo und Mazo,

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

05.02.2010 - 21:54 Uhr

HitTest()

04.02.2010 - 09:15 Uhr

Ein kleines Update

Changelog:

04.02.2010:*Startseite eingebaut *Korrekturen bei der Lokalisierung *Optimierung der Ressourcen *Kleine Änderungen in der GUI

04.02.2010 - 00:45 Uhr

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)

29.01.2010 - 09:22 Uhr

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?

28.01.2010 - 23:02 Uhr

Halllo alle zusammen,

habe diesen thread irgendwie aus den Augen verloren.

erstmal danke für alle antworten.

nach einiger überlegungen, habe ich einfach aus baumarkt so eine 20€ lampe geholt (bei uns kann man das wieder ohne probleme zurück geben 😃), um mir selbst einen Eindruck zu machen.

Ich muss schon sagen, dass für so eine billige lampe war ich ganz schon beeindruckt.
Lampe ist für ein/mein Arbeitstisch vollkommen ausreichen. (oder ich bin sehr bescheiden 😃)

das einziges Manko bei der ist, dass die ziemlich hässlich ist. g

28.01.2010 - 14:28 Uhr

Es gibt ein Buch über SharpDevelop: "Dissecting a C# Application: Inside SharpDevelop"
das Buch gibt es auch als PDF zum runter laden. mal im Inet suchen

das war meine Anlaufstelle. Das Buch basiert allerdings noch auf einer der ersten Versionen von #develop. Inzwischen gibt es einige Änderungen indem AddIn System. Keine gravierenden aber.
Dazu kann ich dir empfehlen den Code zu studieren. Es gibt viele AddIns die das ganze veranschaulichen.

außerdem, obwohl ich kein Guru bin, würde ich dir auch nach Möglichkeit mit einigen Tipps helfen.

28.01.2010 - 13:17 Uhr
  1. Ich sehe das du das Aero Glass aktiviert hast, wie sieht die Applikation unter XP aus? Oder wenn der Benutzer auf Classic eingestellt hat?

http://www.genne-develop.com/temp/etm_xp_luna.png

http://www.genne-develop.com/temp/etm_xp_kls.png

  1. Sind da noch mehr Columns als man auf den Bildern sieht? zur zeit nicht wesentlich
  1. Kann man die Columns optional ein und aus blenden?
  2. Kann man Columns neu anordnen?

ja

  1. Sind nummern Prioritäten möglich? Ich brauche meist Prio 1 - 5.

man kann die namen beliebig vergeben und anordnen

  1. Wir werden die Listen gespeichert? Xml Dateien?

es sind mehrere formate geplannt. ZUr Zeit wird einfach binär serialisiert

  1. Werden Backups angelegt?

nein

  1. Warum haben die expander ein +/- bei Windows > Vista? Müssten doch die pfeile sein

k.A. VisualStyleRenderer macht es eben so?! 8o
ich finde es aber gar nicht so verkehrt.

  1. Sind die Linien von dem Tree ausblendbar?

nein. hättest du gern? 😉

  1. Sind die Kategorien Multiselect, sodas man ein Task mehreren Kategorien zuordnen kann?
  2. Kann man Custom Columns erstellen?

geplant

  1. Wird die applikation noch richtig Lokalisiert?

nach und nach

@Amroc: jop 🙂

28.01.2010 - 12:52 Uhr

Hallo,

verstehe ich richtig, dass damit nur drei vorgegebene Sprachen verwaltet werden?

27.01.2010 - 22:12 Uhr

Jop, dass sind standardfunktionen (welche ich kenne *g), nur hat es eine weile gedauert bis ich gefunden habe, wie man die Anhänge überhaupt anzeigt. ich habe auf den Pfeil links geklickt, dann hat sich was aufgeklappt aber ich konnte es nicht sehen.

das problemmchen kenne ich 8) bis RTM wird noch korrigiert.

Hey, schaut schonmal cool aus 🙂

Wie heißt das TabControl das du nutzt?
Oder ist es ein eigenes?

sieh mal hier 🙂: http://www.genne-develop.com/forum/viewtopic.php?p=384#p384

Was du noch einbauen könntest, das man die einzelnen Aufgabe untereinander verschieben kann.

ist bereits geplant.

26.01.2010 - 16:15 Uhr

sieht sehr gut aus 👍

Danke

  • In der Projektansicht steht ja ganz oben: Projekt"test" aufgaben. Dadrnter gibts nomal ne Zeile, wo steht Projekt erstell am ... im ersten Wort fehlt ein k

ok

-wenn ich eine neue Aufgabe einfüge, ist die neue Zeile nur halb gehighlightened.

die ist nicht halb "gehighlightened" ( 8o ) sondern der Fokus wird gleich in die Namen-Spalte gesetzt und Edit-Modus gestartet.

  • Was ich auch unschön finde ist die Vermischung von englischem und deutschen Text.

das ist eine Alpha/Beta. die Übersetzungen werden nach und nach ergänzt.

  • Dass Enddatum einer Aufgabe darf kleiner sein als das Startdatum ?

ok. ein Fehler

  • ein löschen-button bei den Prioritäten wäre ganz nett

ENTF/DEL auf der Tastatur?! Button mache ich vllt zwischendurch.

  • Wie kann ich Anhänge anschauen / einzeln löschen? (ok habs rausgefunden, hat aber ein wenig gedauert *g)

Rechte Maustaste/Doppelklick/Enter/Del sind eigentlich standard Windows Funktionen 🙂
Ich wollte das Interface nicht zu sehr überladen, deshalb sind einige Funktionen nicht als buttons implementiert. Ich dachte das wäre eigentlich offensichtlich (das gleiche mit Prioritätlöschenbutton). Vermutlich habe ich mich getäuscht. Dafür gibt es aber Leute, die einen auf den richtigen weisen! 🙂

  • auf einmal waren alle aufgaben, die ich eingetragen waren weg (bis auf einen). beim beenden und neu laden des Projektes waren sie aber wieder drin. weiß aber leider net wie ich es geschafft habe ...

wahrscheinlich bist du versehentlich in das schnellsuchfeld reingekommen und dort ein paar zeichen reingetippt. dabei wird die todo-liste nach der zeichenkette gefiltert.

  • wenn ich einen status erstelle und einer Aufgabe diesen Status zuweise und ich lösce den status dann wieder, dann ist der Status direkt auf erledigt. Besser wärs meiner Meinung den Status leer zu lassen und ne Fehlermeldung (in form eines roten Rahmens, Ausrufezeichen, ...) anzuzeigen

  • bei der priorität das gleiche wie oben.

hm...ich überlege mir was.

Hab da mal kurz reingeschaut und bin von deinem GUI Design sehr begeistert. Besonders interessiert mich die DataTreeGridView Componente. Hast du eventuell vor mal die Sourcen zu veröffentlichen, oder nur einen Teil davon? Aus dem GUI Design könnte ich sicher noch was lernen 😉

das habe ich vor, aber erst wenn das Programm RC Status erreicht hat.

25.01.2010 - 23:50 Uhr

Mir fehlt der "Schließen"-Button, der zurzeit nur über die Menü-Bar erreichbar ist, irgendwie noch in der Tab-Leiste drinne. Speichern geschieht durchgehend automatisch? Wo kann ich Kategorien anlegen und verwalten?

die todo listen werden automatisch gespeichert. genauso filter. die konfiguration muss man manuel speichern. hintergrund dabei ist, dass der user noch eine möglichkeit haben soll, die änderungen zu verwerfen.

kategorien kannst du in der konfiguration neue anlegen
über Tabs werde ich überlegen noch.

@Jake: Ups 😃

25.01.2010 - 21:21 Uhr

Hallo,

Nach einer etwas längerer Pause habe ich wieder an meinem kleinen Projekt angefangen zu schrauben.

Da die Pause doch ziemlich groß ausgefallen ist und die neue Version sich stark von der alten Versionen unterscheidet, habe ich mich entschlossen ein neues Thema zu starten statt die alten wieder raus zu graben (mögen die Moderatoren mir verzeihen 😃 ).

falls jemand für die alte Version sich interessiert, kann man hier nach schauen:

ToDo Manager und Add-In für VS 2005

und

Evely Todo-Manager V1.2 Beta 1

Also für die, die es noch nicht kennen, und die, es bereits vergessen haben, kleine Beschreibung.

Evely Todo-Manager ist eine Aufgabenverwaltung. Ursprünglich wurde es als ein VisualStudio AddIn entwickelt und auf Wunsch vieler myCSharp Mitglieder zu einem eigenständigen Programm gewachsen.

Die Version die ich heute vorstelle, wurde von Grund auf neu entwickelt und befindet sich noch im frühen Beta Stand.
Einige Funktionen sind noch nicht implementiert bzw. freigeschaltet.

Das Programm bietet:

  • mehrstufige Aufgabenlisten
  • verschiedene Kategorien für Aufgaben (Priorität, Status, Fälligkeit, etc.)
  • jeder Aufgabe können Anlagen zugeordnet werden.
  • Beschreibung kann formatiert werden. Auch Bilder sind möglich
  • Schnellsuche über Beschreibung/Name der Aufgabe
  • Benutzerdefinierte Filter
  • Grundgerüst des Programms bildet ein von SharpDevelop übernommenes Add-In System. Also ist erweiterbar.
    -..

Da es noch keine endgültige Fassung ist, würde ich mich sehr freuen, wenn ihr das Programm testen und mir eure Erfahrung schildert.

Download über meine Webseite: http://genne-develop.com
oder direkt: http://www.genne-develop.com/stat/getfile.php?id=13

ein paar Bildchen findet ihr hier: http://www.genne-develop.com/forum/viewtopic.php?f=1&t=191

**:::

Changelog:

04.02.2010:*Startseite eingebaut *Korrekturen bei der Lokalisierung *Optimierung der Ressourcen *Kleine Änderungen in der GUI

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 Einstellungsdateiein korrigiert.
    Aus ..AppData\Local\Evely Todo-Manager nach ..AppData\Roaming\Evely Todo-Manager

25.01.2010 - 21:21 Uhr

XP Look

25.01.2010 - 21:21 Uhr

XP klassisch

16.01.2010 - 12:52 Uhr

Hallo@all

ich suche eine Schreibtischlampe für meinen Arbeitstisch. Da ich sehr oft bis ganz in die Nacht arbeite, sollte es nach Möglichkeit wenig Strom verbrauchen. Also dachte ich an eine LED-Lampe. Nun da ich so eine noch nicht hatte, weiß ich nicht wie die so ist. Ist die Beleuchtung ausreichend? Ist Licht beim längerem Arbeiten für Augen erträglich? etc.

Hat jemand schon so ein Teil gehabt? Wie ist die Erfahrung?

22.12.2009 - 22:25 Uhr

thja, lassen wir es als Bug gelten. 😃

ich habe inzwischen notgedrungen andere Lösung geschaffen.

22.12.2009 - 12:17 Uhr

Hi herbivore,

so lange die Einträge in der Liste gleich groß sind, klappt es. Erst wenn die Einträge unterschiedliche Höhe haben, funktioniert es nicht mehr.

ich habe ein kleines Bsp angehängt zum Testen/Nachvollziehen.

21.12.2009 - 22:52 Uhr

Kennt jemand einen Trick, wie ich die Größe des DropDown Bereiches festlegen kann, wenn DrawMode auf OwnerDrawVariable gesetzt ist?

obwohl DropDownHeight auf 200 gesetzt ist, wird beim Aufklappen eine Liste von höchstens 50 px Höhe angezeigt.

08.12.2009 - 15:27 Uhr

ich würde mir einfach einen eigenen Comparer schreiben, der soll die neue Zeile immer nach hinten stellen bei anderen den Standard Comparer bemühen.

sieh dazu: DataGridView.Sort(), IComparer, etc.

02.07.2009 - 00:52 Uhr

wenn man den Wald hinter den Bäumen nicht mehr sieht... 😃

DataGridViewColumnCollection columnCollection = dataGridView.Columns;

    DataGridViewColumn firstVisibleColumn =
        columnCollection.GetFirstColumn(DataGridViewElementStates.Visible);
    DataGridViewColumn lastVisibleColumn =
        columnCollection.GetLastColumn(
            DataGridViewElementStates.Visible, DataGridViewElementStates.None);

02.07.2009 - 00:37 Uhr

also eigentlich ganz einfach. es muss geprüft werden, ob eine eingegebene Spalte die erste bzw. die letzte++ sichtbare++ Spalte in DataGridView ist.

Sichtbar heißt, dass die Spalte nicht ausgeblendet (Visible = true) ist, auch wenn die gerade mal aus dem Client-Berech raus ist (gescrollt).

06.02.2009 - 20:24 Uhr

"SELECT * FROM test WHERE (datum BETWEEN @start AND @end)"

01.02.2009 - 14:40 Uhr

Ich habe kurz dein Demo angeguckt. So richtig finktioneirt es noch nicht. S. das Bildchen.

das ist nach dem ich ein wenig gezoomt habe.
passiert aber nur mit normalen icons. die ordner werden richtig dargestellt.

Vllt. ist das auch nur ein Fehler in der Demo-Anwendung.