Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 03:01

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Problem bei "OOP"

Discussion on Problem bei "OOP" within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2012
Posts: 14
Received Thanks: 0
Problem bei "OOP"

Hiho,

ich habe ein Problem mit der ich sag jetzt mal Versuch an "OO"-Programmierung.
Ich möchte das in der Main-Form beim laden sogesehen die Laufwerke initialisiert werden und in eine Klasse gepackt werden, jedoch tut er dies nicht so wie ich es möchte. Er gibt keine Klasse aus die ich erstelle, noch sonst irgendwie. Wenn ich es nur via DriveInfo versuche klappt das ohne Probleme.
Vielleicht kann mir ja jemand von euch helfen.
Hier ist der Code den ich dafür verwende:

Main-Form
Code:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace FileInitializer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Drive.getDrives();
            int y = 12;
            foreach(Drive drive in Drive._driveLst)
            {
                Button btn = new Button();
                btn.Text = drive.Label + " (" + drive.Name + ")";
                btn.AutoSize = true;
                btn.Location = new Point(5, y);
                y = y + btn.Height;
                tabPage3.Controls.Add(btn);
            }
        }
    }
}
Drive-Klasse
Code:
using System.Collections.Generic;
using System.IO;
using System.Management;

namespace FileInitializer
{
    public class Drive
    {
        public string Name;
        public string Label;
        public double TotalSize;
        public string TotalSizeStr;
        public double FreeSize;
        public string FreeSizeStr;
        public string SN;

        private static List<Drive> driveLst;
        public static List<Drive> _driveLst
        {
            get { return driveLst; }
            set { driveLst = value; }
        }

        public static void getDrives()
        {
            driveLst = new List<Drive>();
            DriveInfo[] drives = DriveInfo.GetDrives();
            foreach (DriveInfo drive in drives)
            {
                if (drive.IsReady)
                {
                    createDrive(drive.Name,
                        drive.VolumeLabel,
                        Check.systemSize(drive.TotalSize),
                        Check.sizeName(drive.TotalSize),
                        Check.systemSize((drive.TotalSize - drive.TotalFreeSpace)),
                        Check.sizeName((drive.TotalSize - drive.TotalFreeSpace)),
                        getHDDSN(drive.Name));
                }
            }
        }

        private static void createDrive(string name, string label, double tsize, string tsizestr, double fsize, string fsizestr, string sn)
        {
            Drive d = new Drive();
            d.Name = name;
            d.Label = label;
            d.TotalSize = tsize;
            d.TotalSizeStr = tsizestr;
            d.FreeSize = fsize;
            d.FreeSizeStr = fsizestr;
            d.SN = sn;
            driveLst.Add(d);
        }

        public static string getHDDSN(string drive)
        {
            if (drive == "" || drive == null)
                drive = "C";

            ManagementObject disk = new ManagementObject("Win32_LogicalDisk.DeviceID=\"" + drive + ":\"");
            disk.Get();
            return disk["VolumeSerialNumber"].ToString();
        }
    }
}
Cotigo is offline  
Old 10/07/2015, 19:19   #2
 
elite*gold: 0
Join Date: Jan 2008
Posts: 23
Received Thanks: 0
Quote:
Originally Posted by Cotigo View Post
Hiho,

ich habe ein Problem mit der ich sag jetzt mal Versuch an "OO"-Programmierung.
Ich möchte das in der Main-Form beim laden sogesehen die Laufwerke initialisiert werden und in eine Klasse gepackt werden, jedoch tut er dies nicht so wie ich es möchte. Er gibt keine Klasse aus die ich erstelle, noch sonst irgendwie. Wenn ich es nur via DriveInfo versuche klappt das ohne Probleme.
Vielleicht kann mir ja jemand von euch helfen.
Hier ist der Code den ich dafür verwende:

Main-Form
Code:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace FileInitializer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Drive.getDrives();
            int y = 12;
            foreach(Drive drive in Drive._driveLst)
            {
// drive enthält bei mir alle laufwerke 
                Button btn = new Button();
                btn.Text = drive.Label + " (" + drive.Name + ")";
                btn.AutoSize = true;
                btn.Location = new Point(5, y);
                y = y + btn.Height;
                tabPage3.Controls.Add(btn);
            }
        }
    }
}
Drive-Klasse
Code:
using System.Collections.Generic;
using System.IO;
using System.Management;

namespace FileInitializer
{
    public class Drive
    {
        public string Name;
        public string Label;
        public double TotalSize;
        public string TotalSizeStr;
        public double FreeSize;
        public string FreeSizeStr;
        public string SN;

        private static List<Drive> driveLst;
        public static List<Drive> _driveLst
        {
            get { return driveLst; }
            set { driveLst = value; }
        }

        public static void getDrives()
        {
            driveLst = new List<Drive>();
            DriveInfo[] drives = DriveInfo.GetDrives();
            foreach (DriveInfo drive in drives)
            {
                if (drive.IsReady)
                {
                    createDrive(drive.Name,
                        drive.VolumeLabel,
//
//                        Check.systemSize(drive.TotalSize),
//                        Check.sizeName(drive.TotalSize),
//                        Check.systemSize((drive.TotalSize - drive.TotalFreeSpace)),
//                        Check.sizeName((drive.TotalSize - drive.TotalFreeSpace)), 
//--- ka wozu - sieht erstmal doof aus
                        getHDDSN(drive.Name));
                }
            }
        }

        private static void createDrive(string name, string label, double tsize, string tsizestr, double fsize, string fsizestr, string sn)
        {
            Drive d = new Drive();
            d.Name = name;
            d.Label = label;
            d.TotalSize = tsize;
            d.TotalSizeStr = tsizestr;
            d.FreeSize = fsize;
            d.FreeSizeStr = fsizestr;
            d.SN = sn;
            driveLst.Add(d);
        }

        public static string getHDDSN(string drive)
        {
            if (drive == "" || drive == null)
                drive = "C";

            ManagementObject disk = new ManagementObject("Win32_LogicalDisk.DeviceID=\"" + drive + ":\"");
            disk.Get();
            return disk["VolumeSerialNumber"].ToString();
        }
    }
}
ich würde dir empfehlen den Konstruktor zu benutzen um die Liste in der Drive Klasse zu initialisieren ( es sei denn du brauchst es On-Demand )
Edit: schau mal in deinen Debugger wo die Daten verloren gehen
Gareas is offline  
Old 10/07/2015, 21:06   #3
 
elite*gold: 0
Join Date: Dec 2012
Posts: 14
Received Thanks: 0
Okay Thema hat sich erledigt. Es war ein Fehler beim Management Import von der Funktion getHDDSN. Der hat bei drive.Name die Laufwerke mit C:\ ausgeworfen was der bei WMI nicht kennt und deswegen hat der nix gemacht.

Danke dir für die Hilfe und den Tipp mit dem Debugger
Cotigo is offline  
Reply




All times are GMT +1. The time now is 03:01.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.