Laden...

Forenbeiträge von Steffen2012 Ingesamt 70 Beiträge

24.06.2014 - 16:07 Uhr

Wie kann ich die Objekte aus der Active Directory in eine Datenbank importieren ???

24.06.2014 - 14:56 Uhr

Hallo zusammen,

ich möchte gerne LDAP Objekte, in meinem Fall erst mal Computerobjekte, in eine Datenbank importieren. Für den Anfang reicht erstmal der Name des Objektes. Ich habe mir eine Abfrage mit der Klasse Computerprincipal gebaut und testhalber mal in einer Combobox ausgeben lassen. Klappt auch. Jetzt möchte ich es so machen das, wenn ich auf einen Button klicke, die Abfrage gestartet wird und mir diese Objekte mit dem Objektnamen in eine Datenbank importiert werden. Der Datenbanktyp ist SQL CE 4.0. Ich vermute mal das ich die Abfrage irgendwie mit einem "INSERT INTO" SQLCommand verbinden kann. Freu mich über euro Ideen und Vorschläge.

LG

20.05.2014 - 12:30 Uhr

Ja hab ich jetzt gemacht.


public MainWindow()
        {

            InitializeComponent();
            
            lstView.DataContext = GetADClients();
        }

Das ListView bleibt aber trotzdem leer.

20.05.2014 - 11:25 Uhr

Hallo zusammen,

ich möchte mir gerne alle vorhandenen Clients in einem ListView anzeigen lassen.


 public partial class MainWindow : Window
    {
        public MainWindow()
        {

            InitializeComponent();
            GetADClients();
        }

        public List<Clients> GetADClients()
        {
            List<Clients> lstClients = new List<Clients>();
            using (var ctx = new PrincipalContext(ContextType.Domain, "domainname"))
            {
                using (var PSearcher = new PrincipalSearcher(new ComputerPrincipal(ctx)))
                {
                    foreach (var client in PSearcher.FindAll())
                    {
                        string Name = Convert.ToString(client.DisplayName);
                        lstClients.Add(new Clients() { clientName = Name });
                    }
                }
            }
            return lstClients;
        }
    }


public class Clients
    {
        public string clientName { get; set; }
    }


<ListView Name="lstView" Grid.Row="1" Grid.RowSpan="1">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding clientName}"/>
                </GridView>
            </ListView.View>
        </ListView>

Das Listview bleibt aber leider leer. Stimmt hier die Bindung nicht oder ist der C# Code fehlerhaft ? Dank im vorraus für Hilfe 😃

10.03.2014 - 16:08 Uhr

Also ich hab mal meinen Rechner neu installiert und dann VS 2013 drauf installiert. Das Problem besteht immer noch. Gibt es vll. bekannte Probleme mit dem aktuellen Silverlight ? WPF funktioniert ohne Probleme. Das Blend für VS 2013 zeigt auch diese Symptome.

25.02.2014 - 16:22 Uhr

Ja. Zumindest meine ich hat das früher immer geklappt 😃 oder bringe ich hier gerade was durcheinander ? ich bin gerade dabei mir das Silverlight ein bisschen anzuschauen

25.02.2014 - 16:13 Uhr

Hallo zusammen,

ich habe hier ein Problem mit dem ich nicht ganz klar komme. Wenn ich ein neues Silverlightprojekt erstelle und ein Control hinzufügen möchte (Button, Label etc.) bekomme ich eine Fehlermeldung. Ich hab es mal angehängt. Ich hab das Visual Studio 2013 Express WEB installiert. Dieses hab ich auch bereits neu installiert. Hat leider nichts gebracht. eine Umstellung auf VS 2013 Ultimate brachte auch nichts. Kann mir vll. jemand sagen woran das liegt ?

Vielen Dank im Vorraus

20.01.2014 - 15:41 Uhr

Also ich hab mich mal bisschen umgeschaut und bin dabei auf SharpVectors gestossen. Ich hab mir mal das ToDo angeschaut. Allerdings wird bei mir das Bild nicht angezeigt. Es wird aber auch kein Fehler angegeben. Das Programm compiliert ohne zu murren.


<Window x:Class="PES_Tool.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:svgc="http://sharpvectors.codeplex.com/svgc/"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <DockPanel>
        <TabControl SelectedIndex="0" OverridesDefaultStyle="False" >
            <TabItem>
                <TabItem.Header>By Local File</TabItem.Header>
                <TabItem.Content>
                    <Image Source="{svgc:SvgImage Source=/SVG/Test.svg}" Stretch="Uniform" />
                </TabItem.Content>
            </TabItem>
        </TabControl>
    </DockPanel>
</Window>

Ich hab mal den XAML Code angehangen sowie meine Projektmappe angehangen. Vielleicht kann mir jemand helfen ?

17.01.2014 - 13:43 Uhr

Also ich habs mir mal angesehen. Wenn ich richtig liege, dann muss ich das SVG-File in ein XAML-File umwandeln. Mit InkScape oder Adobe scheint das zu gehen. Ich hab es mal mit Inkscape gemacht. Jetzt hab ich eine XAML Datei. Wie kann ich die in das RibbonControl einbinden ???

17.01.2014 - 09:57 Uhr

Hallo zusammen,

ich hätte mal ein Anliegen. Ich probiere gerade diverse RibbonControls (MS Ribbon, Fluent Ribbon usw.) aus. Es klappt auch soweit. Was mich allerdings etwas stört ist die Tatsache das wenn ich Icons in dieses Control einfüge, die Qualität doch recht mies ist. Z.B. sind die Kanten des Icon "ausgefranst". Ich habe mal verschiedene Pixelgrößen getestet bzw *.png und *.ico probiert. Bei allen sieht es wirklich schlecht aus. Ich hab mich mal bisschen im Netz umgesehen und hab festgestellt das ich wohl nicht der einzige bin der das Problem hat. Hab mal einen XAML code angehangen.


<Custom:RibbonWindow
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Custom="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon" x:Class="WpfApplication2.MainWindow"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

        <Custom:Ribbon>
            <Custom:Ribbon.ApplicationMenu>
                <Custom:RibbonApplicationMenu>
                    <Custom:RibbonApplicationMenuItem ImageSource="Images\exit (1).png" RenderOptions.BitmapScalingMode="NearestNeighbor" />
                </Custom:RibbonApplicationMenu>
            </Custom:Ribbon.ApplicationMenu>
        </Custom:Ribbon>

    </Grid>
</Custom:RibbonWindow>

Hat jemand eine Idee was man noch tun könnte um das Icon "sauberer" hinzubekommen ?

Vielen Dank für die Hilfe 😃

12.12.2013 - 08:13 Uhr

Hallo,

ich habe einige Daten in einer List<>. Dies möchte ich nach bestimmten Einträgen durchsuchen und anschließend löschen.


private void ListMembers()
        {
            string ext = "L_RW";
            GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx,
comboGroup.SelectedItem.ToString());
            List<string> members = new List<string>();
            members.Add(group.ToString());

            foreach (var names in group.Members)
            {
                lstBox1.Items.Add(names);
                if (members.Any(s => s.Contains(ext)))
                {
                    lstBox1.Items.Remove(members);
                }
            }
        }

In meinem Beispiel ist es so das es Einträge gibt, die mit L_RW enden. Diese müssen gefunden und entfernt werden. Wenn ich mein Programm starte sind diese allerdings noch vorhanden. Hat jemand einen Tip ?

06.12.2013 - 11:11 Uhr

Wird die Klasse "MyDrivesProvider" dann als Model angelegt ? Wenn ich das richtig verstehe wird doch im Model die Datenquelle angegeben. Und das ist doch dann in dem Fall die Klasse DriveInfo. .... oder nicht ? 😃

06.12.2013 - 10:27 Uhr

Ok ich hab den XAML-Code angepasst.


<Grid>
        <TreeView ItemsSource="{Binding Path=GetDrives}" ></TreeView> 
    </Grid>

Ebenfalls das MainWindow


public partial class MainWindow : Window
    {
        private DriveViewModel _drives;

        public MainWindow()
        {
            InitializeComponent();
            _drives = new DriveViewModel();
            DataContext = _drives;
            _drives.Initialize();
        }
    }

Die Laufwerke werden mir jetzt angezeigt.Bzw. die Laufwerksbuchstaben.

Was genau meinst du mit
"Im ViewModel: Stell doch die Source einfach dort zur Verfügung. Dass es mal klar wird, was da passiert.

Das Model ist bei dir mehr ein Repository. Aber okay.
" ?

06.12.2013 - 09:58 Uhr

Das glaub ich auch bald 😃

06.12.2013 - 09:47 Uhr

Also ich glaube ich bin auf dem richtigen Weg. Allerdings bleibt mein TreeView leider leer.

Model:


namespace ComputerDrives.Model
{
    public class MyDrives : ObservableCollection<DriveInfo>
    {
        DriveInfo[] drives = DriveInfo.GetDrives();

        public MyDrives()
        {
            foreach (var d in drives)
            {
                Add(d);
            }
        }
    }
}

ViewModel:


namespace ComputerDrives.ViewModel
{
    public class BaseViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}


namespace ComputerDrives.ViewModel
{
    public class DriveViewModel : BaseViewModel
    {
        private MyDrives _getDrives;
        public MyDrives GetDrives
        {
            get { return _getDrives; }
            set
            {
                if (_getDrives != value)
                    _getDrives = value;
                OnPropertyChanged("GetDrives");
            }
        }

        public void Initialize()
        {
            GetDrives = new MyDrives();
        }
    }
}

View:


namespace ComputerDrives
{
    public partial class MainWindow : Window
    {
        private DriveViewModel _drives;

        public MainWindow()
        {
            InitializeComponent();
            _drives = new DriveViewModel();
            DataContext = _drives;
        }
    }
}


<Window x:Class="ComputerDrives.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">
    
    <Window.Resources>
        <CollectionViewSource x:Key="driveView" Source="{Binding Path=GetDrives}"/>
    </Window.Resources>
    
    
    <Grid>
        <TreeView ItemsSource="{Binding Source={StaticResource driveView}}" ></TreeView> 
    </Grid>
</Window>

Kann mir jemand sagen was ich falsch mache ? 😃

28.11.2013 - 13:33 Uhr

Also ich habe es mal impelmentiert. Wird aber mit Sicherheit falsch sein 😃


<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        
        <TreeView Name="trv1">
            <TreeViewItem Header="Computer" ItemsSource="{Binding Source=Name}"/>
        </TreeView>


public class FileSystemViewModel : BaseViewModel
    {
        private List<MyDrives> allDrives;

        public FileSystemViewModel()
        {
            allDrives = new List<MyDrives>();
        }

        private string name;
        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }
    }

28.11.2013 - 11:55 Uhr

Auflisten dann in etwa so :


public class FileSystemViewModel : BaseViewModel
    {
        private List<MyDrives> allDrives;

        public FileSystemViewModel()
        {
            allDrives = new List<MyDrives>();
        }
    }

Kann man das nicht auch mit einer ObservableCollection machen ?

28.11.2013 - 11:33 Uhr

Hallo zusammen,

ich bin gerade dabei, mir in meinem Projekt alles Laufwerke anzeigen zu lassen. Dieses möchte ich im MVVM realisieren. allerdings komme ich nicht so richtig weiter. Es geht jetzt einfach nur mal darum mir in einem Treeview mein Laufwerke mit Namen anzeigen zu lassen:

Model


namespace WpfApplication1.Model
{
    public class MyDrives
    {
        public string driveName { get; set; }
    }
}

ViewModel




namespace WpfApplication1.ViewModel
{
    public class BaseViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

        public BaseViewModel()
        {
        }
    }
}


namespace WpfApplication1.ViewModel
{
    public class FileSystemViewModel : BaseViewModel
    {

    }
}

View




<Window x:Class="WpfApplication1.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">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        
        <TreeView></TreeView>

    </Grid>
</Window

Ich möchte das ganze "irgendwie" mit DriveInfo machen. Ich weiss allerdings nicht wo und wie ich das implementieren soll bzw. kann. Ich bin was MVVM angeht noch ein blutiger Anfänger 😃 Danke im Vorraus

27.11.2013 - 15:59 Uhr

Hallo zusammen,

ich habe folgende Aufgabe bekommen. Ich soll ein Programm entwickeln das bestimmte Wörter in einem Kennwort filtert. Also quasi folgender Vorgang:

User wird aufgefordert sein Windowskennwort zu ändern. User ändert es ab. Bei der Überprüfung des Kennwortes soll eine Art Blacklist im Hintergrund abgerufen werden, die überprüft, ob der User ein bestimmtes Wort im Kennwort hat was in der Blacklist enthalten ist. Wenn ja soll eine Meldung erscheinen und der User muss sich ein neues Kennwort überlegen.

Ich habe mich zwar schon mit Active Directory beschäftigt (PrincipalContext etc.) aber in dem Fall bin ich ein bisschen überfragt wie ich anfangen soll. Des weiteren muss das ja dann auch in die Active Directory "irgendwie" eingebaut werden. Würde mich über viele Vorschläge und Lösungsansätze freuen. Danke im Vorraus 😃

26.11.2013 - 14:30 Uhr

<Window.Resources>
        <Style x:Key="BaseStyle" TargetType="{x:Type Control}">
            <Setter Property="Background" Value="Black"/>
        </Style>
    </Window.Resources>


    <Grid>
        <Grid.Background>
            <ImageBrush ImageSource="Images\Other\997_neu.png" Stretch="UniformToFill" />
        </Grid.Background>

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <Ribbon Grid.ColumnSpan="3" Style="{StaticResource BaseStyle}" >


        <StatusBar Grid.Row="3" Grid.ColumnSpan="3" Height="23" Style="{StaticResource BaseStyle}">
        </StatusBar>
    </Grid>

Hab da noch was gefunden.Diese Lösung funktioniert soweit. Aber gibt es vll. noch eine kürzere Variante. Quasi global festlegen das es für alle Controls automatisch übernommen wird.

26.11.2013 - 14:24 Uhr

Danke für die Antwort 😃. allerdings tut sich da gar nichts. Die Controls behalten ihre ursprüngliche Farbe bei.

26.11.2013 - 14:03 Uhr

Hallo zusammen,

ich möchte gerne mehrere WPF Controls(Buttons, Statusbar etc.) mit der Eigentschaft Background in der Farbe Schwarz versehen. Jetzt hab ich mich mal bisschen umgesehen und bin dabei auf folgendes Beispiel:


<Window.Resources>
        <Style TargetType="StatusBar">
            <Setter Property="Background" Value="Black"/>
        </Style>       
    </Window.Resources>

Klappt auch soweit. Kann ich es aber so einrichten das ich sage das ALLE Controls in meinem Programm die Farbe Schwarz haben ,oder muss ich für jedes Control einen neuen Style aufrufen ?

Grüße

25.11.2013 - 16:50 Uhr

Guten Abend zusammen,

ich kreiere mir gerade eine WPF GUI zusammen die eine RibbonBar enthält. Diese beziehe ich aus dem Net Framework 4.5 (Verweise). Jetzt möchte ich allerding für meine GUI verschiedene Themes haben. Diese habe ich auch eingebunden über die Apps.xaml als Resourcedictionary. Als Beispiel habe ich das Theme "ExpressionDark" eingebunden. Wenn ich die Anwendung starte wird die Ribbonbar nicht in diesem besagten Theme angezeigt sondern in dem StandartBlau. Füge ich allerding einen normalen WPF Button hinzu wird dieser schwarz dargestellt. Was muss ich tun damit das Design der Ribbonbar ebenfalls verändert wird ?

22.11.2013 - 10:21 Uhr

Hallo,

ich hab mal eine Frage. Wenn ich das richtig verstanden habe stellt ein Model die Daten nur bereit. Wie ist das zu verstehen ? Muss ich dann in meinem Fall die Methode in das Model implementieren ? und übergebe diese dann an das ViewModel ?

21.11.2013 - 11:56 Uhr

Hallo zusammen,

ich möchte mich mit MVVM etwas vertraut machen. Als kleines Projekt möchte ich alle Computer die in einem Active Directory angelegt sind ausgeben. Ich habe bereits ein "normales" Programm geschrieben.


private void GetADComputers(string domainName, ListBox listBox)
        {
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName);
            ComputerPrincipal cP = new ComputerPrincipal(ctx);
            cP.Name="*";
            PrincipalSearcher ps = new PrincipalSearcher();
            ps.QueryFilter = cP;
            PrincipalSearchResult<Principal> result = ps.FindAll();
            foreach (ComputerPrincipal p in result)
            {
                listBox.Items.Add(p);
            }
            
        }

Ich möchte dieses nun als MVVM umsetzen können. Leider fehlt mir ein bisschen der Lösungsansatz was ich in das Model und was in das Viewmodel schreibe. Würde mich über ein bisschen Hilfe bzw. Lösungansätze freuen. Vielen Dank im Vorraus für die Unterstützung

18.11.2013 - 10:52 Uhr

Servus,

ich steh gerade irgendwie auf dem Schlauch. Ich hab folgenden Code


public static List<string> GetComputers()
        {
            List<string> ComputerNames = new List<string>();

            DirectoryEntry entry = new DirectoryEntry("LDAP://mydomain");
            DirectorySearcher search = new DirectorySearcher(entry);
            search.Filter = ("(objectClass=computer)");
            search.SizeLimit = int.MaxValue;
            search.PageSize = int.MaxValue;
            ComputerNames.Sort();


            foreach(SearchResult result in search.FindAll())
            {
                string ComputerName = result.GetDirectoryEntry().Name;
                if (ComputerName.StartsWith("CN="))
                    ComputerName = ComputerName.Remove(0, "CN=".Length);
                ComputerNames.Add(ComputerName);
            }
            search.Dispose();
            entry.Dispose();
            return ComputerNames;
        }

Ich möchte mir das Ergebnis einfach mit Console.Writeline ausgeben lassen. Ich blick es gerade nur nicht. Console.Writeline(GetComputers) klappt nicht. Da wird nur "System.Collections.Generic.List`1[System.String]" zurückgegeben. Kann mir bitte jemand helfen ? Danke :

05.11.2013 - 09:47 Uhr

Hallo zusammen,

ich möchte mir ein Tool schreiben das Dateien und Ordner im Windows Explorer rekursiv sucht. Ich benutze Windows 7. Es sollte wie folgt funktionieren. Ich gehe auf ein Netzlaufwerk in der Firma z.B. M. Dann klicke ich mich in ein paar Ordner und Unterordner rein. Jetzt öffne ich das Kontextmenü und rufe das selbsterstellt Programm auf. Dieses sollte nur mit Textfeld und einem Suchbutton versehen sein. Dann gebe ich irgendeinen Suchbegriff ein. Nach anklicken des Suchbutton soll der mir das Verzeichnis in dem ich mich momentan befinde sowie alle Unterverzeichnisse durchsuchen und dann entweder im selben Windows Explorer fenster ausgeben oder in in einem Neuen. Ich hoffe ihr versteht was ich meine. Das Tool soll im Endeffekt dasselbe machen wie diese integrierte Suchfunktion im Explorer. Aber die ist Mist 😉. Danke im Vorraus für eure Hilfe

14.02.2013 - 14:37 Uhr

Coole Sache. Vielen Dank.

14.02.2013 - 14:24 Uhr

Hallo zusammen,

ich probiere mich gerade ein bisschen an MVVM. Als kleines Beispiel möchte ich meinen Computernamen in einem Label anzeigen lassen. Das ganze soll mit WPF geschehen.

Model



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ComputerInfo.Model
{
    public class Computer
    {
        public string ComputerNames { get; set; }

        public static Computer GetName()
        {
            return new Computer
            {
                ComputerNames = System.Environment.MachineName
            };
        }
    }
}

ViewModel



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ComputerInfo.Model;
using System.ComponentModel;

namespace ComputerInfo.ViewModel
{
    public class ComputerViewModel : INotifyPropertyChanged
    {
        private Computer _computer;

        public ComputerViewModel(Computer computer)
        {
            _computer = computer;
            _Name = _computer.ComputerNames;
        }

        private string _Name;
        public string Name
        {
            get { return _Name; }
            set
            {
                if (_Name == value) return;
                _Name = value;
                OnPropertyChanged("Name");
            }

        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected internal void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

View


<Window x:Class="ComputerInfo.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">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Label Content="Computername:" />
        <Label Grid.Column="1" Name="lblCompName" Content="{Binding Path=ComputerNames}"/>
    </Grid>
</Window>

Datacontext


using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ComputerInfo.Model;
using ComputerInfo.ViewModel;

namespace ComputerInfo
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new ComputerViewModel(Computer.GetName());
        }
    }
}

Mein Label bleibt allerdings leer 😦 Danke im Vorraus 😮)

29.10.2012 - 08:15 Uhr

Hallo zusammen,

ich komme gerade nicht so richtig weiter mit meinem Programm. Ich habe ein TreeView mit dem ich mir von einem bestimmten Netzlaufwerk im Firmennetz die Ordner anzeigen lasse. Das klappt auch alles soweit hervorragend.


public void FillTreeView(string path, TreeView treeView)
        {
            foreach (string s in Directory.GetDirectories(path))
            {
                rootItem = new TreeViewItem();
                rootItem.Header = s;
                rootItem.Tag = s;
                rootItem.Items.Add(dummy);
                rootItem.Expanded += new RoutedEventHandler(ExpandTreeView);
                treeView.Items.Add(rootItem);
                treeView.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending));
            }
        }

        private void ExpandTreeView(object sender, RoutedEventArgs e)
        {
            rootItem = (TreeViewItem)sender;

            if (rootItem.Items.Count == 1 && rootItem.Items[0] == dummy)
            {
                rootItem.Items.Clear();

                string[] dirs;
                try
                {
                    dirs = Directory.GetDirectories((string)rootItem.Tag);
                }
                catch { return; }

                foreach (var dir in dirs)
                {
                    subItem = new TreeViewItem();
                    subItem.Header = new DirectoryInfo(dir).FullName;

                    try
                    {
                        if(Directory.GetDirectories(dir).Length > 0)
                            subItem.Items.Add(null);
                    }
                    catch{}
                    subItem.Expanded += new RoutedEventHandler(ExpandTreeView);
                    rootItem.Items.Add(subItem);
                    rootItem.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending));
                }
            }
        }

Ich verwende für subitem.header die Anzeigeeigenschaft "Fullname". Dies bewirkt ja das mir jeder Ordner im Verzeichnisbaum mit komplettem Pfad angezeigt wird. Durch ein Selecteditemchangedevent sollen mir von jedem Ordner ganz bestimmte dinge angezeigt werden. Klappt auch. Aus optischen Gründen möchte ich aber lieber die Eigenschaft "Name" verwenden. Allerdings stürzt dann das Programm ab, da ja beim Selecteditemchangedevent der Pfad nicht gefunden wird. Meine Frage wäre also wie ich dieses Problem lösen kann.

Vielen Dank und einen guten Wochenstart 😃

16.10.2012 - 16:05 Uhr

Kannst du mir vll. noch sagen wie bei einer ObservableCollection folgendes bewältigt werden kann:

  • alphabetische Sortierung
  • löschen von doppelten Einträgen
16.10.2012 - 15:59 Uhr

Oh Mann. Ich seh den Wald vor lauter Bäumen nicht. Danke schön. Klappt 1A.

16.10.2012 - 15:40 Uhr

Hallo,

ich versuche gerade eine ObservableCollection an eine ListView zu binden. Ich habe eine Klasse "Users":


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace userlist
{
    public class Users
    {
        public string userName { get; set; }
    }
}

ich habe eine Klasse "MembersList:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace userlist
{
    public class MembersList
    {
        ObservableCollection<Users> _userlist = new ObservableCollection<Users>();

        public void SetUser(string user)
        {
            _userlist.Add(new Users {userName = user});
        }

        public ObservableCollection<Users> UserList
        {
            get { return _userlist; }
        }
    }
}

und der Code für mein Hauptfenster


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace userlist
{

    public partial class MainWindow : Window
    {
        private MembersList members = new MembersList();
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            members.SetUser("TestUser");    
        }
    }
}

Und hier der XAML-Code


<Window x:Class="userlist.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        DataContext="{Binding RelativeSource={RelativeSource Self}}"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <ListView Name="listView1" ItemsSource="{Binding UserList}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="300" Header="Name" DisplayMemberBinding="{Binding userName}" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

Mein Problem ist das in meiner ListView nichts angezeigt wird. Ich habe noch ein ähnliches Programm geschrieben. Da wurde die ObservableCollection allerdings in das MainWindow implementiert. Kann mir vll. jemand weiterhelfen ? Vielen Dank.

05.10.2012 - 12:12 Uhr

Ok hat sich erledigt. Hab es inzwischen selbst hinbekommen

04.10.2012 - 08:04 Uhr

Hallo zusammen,

ich schreib gerade ein Tool bei dem es möglich sein soll Benutzer einer bestimmten Gruppe im AD auszulesen. Mein Programm is in WPF geschrieben. Im Hauptfenster befindet sich licnks ein Treeview und rechts davon 2 Listboxen. Folgendes klappt bereits:

  • Darstellung der Ordnerstruktur im TreeView

public partial class MainWindow : Window
    {
        private string source = "P:";
        private object dummy = null;
        private TreeViewItem rootItem;
        private DirectoryInfo dInfo;
        private DirectorySecurity dSec;

        public MainWindow()
        {
            InitializeComponent();
            FillTreeView();
        }

        private void FillTreeView()
        {
            foreach (string s in Directory.GetDirectories(source))
            {
                rootItem = new TreeViewItem();
                rootItem.Header = s;
                rootItem.Tag = s;
                rootItem.Items.Add(dummy);
                rootItem.Expanded += new RoutedEventHandler(Folder_Expand);
                treeView1.Items.Add(rootItem);
            }
        }

        private void Folder_Expand(object sender, RoutedEventArgs e)
        {
            TreeViewItem item = (TreeViewItem)sender;
            if (item.Items.Count == 1 && item.Items[0] == dummy)
            {
                item.Items.Clear();
                try
                {
                    foreach (string s in Directory.GetDirectories(item.Tag.ToString()))
                    {
                        TreeViewItem subitem = new TreeViewItem();
                        subitem.Header = s;
                        subitem.Expanded += new RoutedEventHandler(Folder_Expand);
                        item.Items.Add(subitem);
                    }
                }
                catch (Exception) { }
            }
        }

  • Auslesen der NTFS-Berechtigungen in der Ordnerstruktur und Darstellung der Gruppen in der ersten Listbox.

private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            listBox1.Items.Clear();
            dInfo = new DirectoryInfo(((TreeViewItem)e.NewValue).Header.ToString());
            dSec = dInfo.GetAccessControl();

            foreach (FileSystemAccessRule rule in dSec.GetAccessRules(true, true, typeof(NTAccount)))
            {
                listBox1.Items.Add(rule.IdentityReference.ToString());
            }
        }

Mein Problem ist jetzt folgendes. Ich möchte in Listbox 1 durch ein SelectionChangedEvent mir von der jeweils markierten Gruppe die Members in ListBox 2 anzeigen lassen. Ich hab mich schon im Netz umgesehen aber ich komm zu keinem richtigen Ansatz wie ich das machen könnte. Vll könnt ihr mir weiter helfen. Vielen Dank im vorraus.

28.09.2012 - 09:45 Uhr

scheint wohl doch komplizierter zu sein

26.09.2012 - 09:08 Uhr

Hallo zusammen,

ich schreibe gerade an einem kleinen Tool das Gruppen und Benutzer eines Netzlaufwerkes bzw. Von Ordnern auslesen soll. Zu meinem Programm gehören ein Treeview (Pfasanzeige) und eine ListBox (Gruppen- und Benutzeranzeige).

Hier der Code um die Listbox zu füllen:


private void FillTreeviewRootItems()
        {
            foreach (string s in Directory.GetDirectories(source))
            {
                rootItem = new TreeViewItem();                             //erstellt für jeden gefundenen Eintrag ein TreeVieItem
                rootItem.Header = s.Substring(s.LastIndexOf("\\") + 1);    //abschneiden der Pfadangabe
                rootItem.Tag = s;
                rootItem.Items.Add(dummy);                                 //fügt ein leeren Eintrag unterhalb des TreeViewItem ein
                treeView1.Items.Add(rootItem);                             //fügt alle gefundenen Einträge in das Treeview ein und zeigt sie an
            }
        }

Hier der Code für das Auslesen der Gruppen und Benutzer:


private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            try
            {
                listBox1.Items.Clear();//leert die Listbox bei jedem Klick auf einen neuen Eintrag (nur RootItem)
                dS = Directory.GetAccessControl(rootItem.ToString());
                arc = dS.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));

                foreach (FileSystemAccessRule fsar in arc)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine(fsar.IdentityReference.Value);
                    listBox1.Items.Add(sb.ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

Wenn ich das Programm starte und auf einen Eintrag im TreeView klicke kommt ein Fehler: "Ungültiger Name. Parameter name".
Ich steh gerade bisschen aucf dem Schlauch und hoffe auf eure Hilfe.

Vielen Dank.

24.09.2012 - 08:03 Uhr

Moin Moin,

also wenn du den genannten Registrypfad aufrufst:


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\"Monitorname bzw. Typ\DEVICE Parameters\EDID"

..dann sollte beim Aufrufen des Eintrages im Bereich "Pfad" in der drittletzten oder vorletzten Zeile ein Teil der Seriennummer zu sehen sein. Da die SN bei den meisten Monitoren vom selben Typ gleich beginnen, wird der erste Teil in diesem Pfad weggeschnitten. Einfach mal vergleichen. Wir haben hier auch DELL und da klappt das hervorragend.

21.09.2012 - 13:14 Uhr

Ich hab inzwischen eine Möglichkeit gefunden die SN auszulesen. Die funzt aber nicht über WMI sondern über die Registry Registry.LocalMachine.


OpenSubKey(@"SYSTEM\CurrentControlSet\Enum\DISPLAY");

Das Problem mit dem Sortieren hab ich allerdings auch noch.

20.09.2012 - 14:55 Uhr

Also ich bin da jetzt gerade mal dran. Ich benutze VS2010 und WPF. Ich hab mir ne Listbox erstellt. Das auslesen der AD klappt soweit mal. Aber schon fangen die kleineren Problemchen an. Wir haben Notbooks und Desktops. Die Namenskonvention ist BIPCXXX und BINOXXX (XXX steht für zahlen). Wie kann ich mir das ganze sortieren lassen ??? Ich hab zwar bereits Codebeispiele im Netz gefunden und probiert, aber sortiert wird trotzdem nicht. Die einträge werden nur anders zusammen gewürfelt.

Code zum auslesen:


private void FillListBox()
        {
            DirectoryEntry entry = new DirectoryEntry("LDAP://meinedomain");
            DirectorySearcher search = new DirectorySearcher(entry);
            search.Filter = ("(objectClass=computer)");

            foreach (SearchResult result in search.FindAll())
            {
                ComputerName = result.GetDirectoryEntry().Name;
                if (ComputerName.StartsWith("CN="))
                {
                    ComputerName = ComputerName.Remove(0, "CN=".Length);
                    if (ComputerName.StartsWith("BI"))
                    {
                        listBox1.Items.Add(ComputerName);                       
                    }
                }
            }

Code zum sortieren:


private void button1_Click(object sender, RoutedEventArgs e)
        {

            listBox1.Items.SortDescriptions.Add(new SortDescription(ComputerName, ListSortDirection.Descending));
         
        }

Weiss da jemand was ich falsch mache ??? THX im Vorraus

17.09.2012 - 11:43 Uhr

Ich hab es noch nicht probiert. Bin erstmal auf Ideensammlung 😃

17.09.2012 - 10:30 Uhr

Hallo zusammen,

ich habe ein Aufgabe mit der folgendes bewerkstelligt werden soll. Ich soll von allen Monitoren in unserer Firma die Seriennummern sowie Modellbezeichnung herausbekommen. Wir haben eine Active Directory. Wie kann ich diese Aufgabe am besten angehen ???? Ich habe mir überlegt über DirectoryServices alles Rechner in der AD zu suchen und dann per WMI-Abfrage (Win32_DesktopMonitor) die Seriennummer des an den PC angeschlossenen Monitor herauszubekommen. Vielen Dank im Vorraus 😃

27.08.2012 - 07:49 Uhr

Hallo zusammen,

ich bin gerade dabei mir eine Art FileExplorer zu bauen. Es klappt soweit auch alles hervorragend. Ich bin jetzt gerade aber an einem Punkt angekommen wo ich nicht so richtig weiter komme. Wie ihr dem Screenshot entnehmen könnt lasse ich mir die Laufwerke meines Computers über DriveInfo ausgeben und die darunter liegenden Ordner über Directory.GetDirectories. Klappt auch alles supi. Jetzt möchte ich der Schönheit halber gerne die Struktur mit Icons versehen. Ich brauche insgesamt drei. Einmal für die internen Partitionen, dann für die darunter liegenden Ordner sowie für die eingebundenen Netzlaufwerke. Kann mir da vll jemand weiterhelfen ? Das Programm wird in WPF geschrieben. Vielen Dank im vorraus.

09.08.2012 - 16:17 Uhr

Hallo zusammen,

ich hab hier ein Problem bei dem ich absolut nicht weiterkomme. Ich probier gerade mit WPF einen kleinen MP3-Player zu bauen auf Basis von DirectX. Hier mal mein Code:


public void Openfiles()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Multiselect = true;
            Nullable<bool> result = ofd.ShowDialog();

            if (result == true)
            {
                //string[] files = ofd.FileNames;
                //for (int i = 0; i < files.Length; i++)
                //{
                //    listBox1.Items.Add(System.IO.Path.GetFileName(files[i]));
                //}

                foreach (string s in ofd.FileNames)
                {
                    listBox1.Items.Add(s);
                }
                
            }
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Openfiles();
        }

        private void button4_Click(object sender, RoutedEventArgs e)
        {
            Audio sound = new Audio(listBox1.SelectedItem.ToString());
            sound.Play();
        }

Wie man erkennen kann möchte ich über einen OpenFiledialog Mp3's in meine Listbox laden. Dies klappt auch soweit ganz gut und abgespielt werden sie auch. Allerdings nur wenn ich die foreach - Schleife verwende. Hier wird allerdings der komplette Pafad in der Listbox mit angezeigt. Wenn ich den auskommentierten Bereich der Methode verwende werden zwar die Dateien direkt ohne Pfad angezeigt, aber eben nicht abgespielt. Beim Ausführen des Programms wird mir der Inhalt von sound mit NULL angezeigt. Wie kann ich mir also nur die Dateinamen anzeigen lassen und mein Programm beim SelectedItem-Event den Song abspielen lassen ???

Danke im vorraus 😃

30.06.2012 - 16:17 Uhr

Hallo zusammen,

ich hab hier so ein kleines Problem bei dem ich etwas Hilfe bräuchte. Hier mal der Code:


private void FillDataGrid()
        {
            try
            {
                ds.ReadXml("matlab_config.xml");
                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = "user_conf";
            }
            catch(Exception ex)
            {
                if (MessageBox.Show(ex.Message) == DialogResult.OK)
                {
                    frmNewLiz frm2 = new frmNewLiz();
                    frm2.ShowDialog();
                }
            }
        }

Es soll folgendes passieren. Wenn der Try-Block fehlschlägt soll sich eine Form (frm2) öffnen. Es sollte doch richtig sein wie ich es oben eingegeben habe das wenn OK geklickt wird sich die form öffnet oder ??? Das Problem ist sie tut es aber nicht. Ich kann 100 mal auf ok klicken und aber die MessageBox geht nicht zu bzw. frm2 öffnet sich nicht. Weiß jemand Rat ? Hab ich vll. einen Denkfehler drin ???

Danke im Vorraus
Steffen

25.06.2012 - 14:30 Uhr

Jaaaaa jetzt klappt es hahahaaaa. Ich hab mich da mit der Zeilenreihenfolge vertan. Vielen Dank 😉

25.06.2012 - 14:27 Uhr

Also der Debugger zeigt mir nur 2 "" an. Ich hab da mal einen Anhang mit hochgeladen

25.06.2012 - 14:09 Uhr

Hallo zusammen,

ich hab da mal ein kleines Anliegen. Ich arbeite mich gerade etwas in das Thema ADO.Net ein. Mein erstes Programm soll eigentlich nichts weiter tun als bei einem Button_Click Event eine MessageBox auszugeben mit erfolgter erfolgreicher Verbindung. Hier mal die ConnectionKlasse:


namespace MovieDB2012_SQL
{
    public class DBConnect
    {
        public string dataSource { get; set; }
        public string dataBaseName { get; set; }
        public string userName { get; set; }
        public string passWord { get; set; }

        private SqlConnectionStringBuilder sqlCsb = new SqlConnectionStringBuilder();
        private SqlConnection sqlConn;


        public void ConnectToSQL()
        {
            try
            {
                sqlConn = new SqlConnection(sqlCsb.ConnectionString);
                sqlCsb.DataSource = dataSource;
                sqlCsb.InitialCatalog = dataBaseName;
                sqlCsb.UserID = userName;
                sqlCsb.Password = passWord;
                sqlConn.Open();
                MessageBox.Show("Erfolg");
                sqlConn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

und hier der Quellcode der Form1:


namespace MovieDB2012_SQL
{
    public partial class frmMainForm : Form
    {
        private DBConnect connections = new DBConnect();
        public frmMainForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            connections.dataSource = @".\SQLEXPRESS";
            connections.dataBaseName = "MovieDB2012";
            connections.userName = "Steffen";
            connections.passWord = "Start01";
            connections.ConnectToSQL();
        }
    }
}

Mein Problem ist eigentlich nur das der Kompiler mir sagt das der ConnectionString nicht initalisiert wäre.

MFG Steffen

30.03.2012 - 14:42 Uhr

"Die Grundlagen, wie man die Logik in der Anwendung einpflanzt" wäre hier die beste Antwort.

30.03.2012 - 13:46 Uhr

Jaaaaaaaaaaaaa. Genau so 😃 Beim Programmstart soll in der XML-Datei geschaut werden, Welche DB als letztes benutzt wurde und den Connectionstring dann wiederherstellen. Mein Problem besteht eigentlich darin wie ich so etwas bewerkstelligen kann.