このような情報を表示するツリーリストビューを作成しようとしています
ComputerName(String)
-> OS(String)
-> Drives(String)
-> DriveLabel(String)
理由はわかりませんが、オブジェクト モデルに基づいてツリー ビューを作成できません。何が起こっているのでしょうか? 私はしばらくこれをいじっていましたが、おそらく自分自身を混乱させただけかもしれませんが、このコントロールを使用するのはそれほど難しいことではありません....どんな助けも大歓迎です. ありがとう!
これが私のクラスです
public class ComputerInfo
{
public string ComputerName { get; set; }
public string OS { get; set; }
public string Pingable { get; set; }
public List<string> Memory { get; set; }
public List<string> Drives { get; set; }
public ComputerInfo()
{
this.Memory = new List<string>();
this.Drives = new List<string>();
}
}
私が読んだことから、ロードアップ中にデリゲートコードを配置する必要があります
public Form1()
{
InitializeComponent();
this.treeListView1.CanExpandGetter = delegate(object x)
{
return true;
};
this.treeListView1.ChildrenGetter = delegate(object x)
{
NetworkDefrag.DefragClass.ComputerInfo pc = x as NetworkDefrag.DefragClass.ComputerInfo;
return pc.Drives;
};
}
これが実際の作業のコードです
public void work2(string line)
{
NetworkDefrag.DefragClass.ComputerInfo computer = new DefragClass.ComputerInfo();
computer.ComputerName = line;
//1
bool pingable = false;
Task pingTask = new Task(() => pingable = PingHost(line));
pingTask.Start();
pingTask.Wait();
//2
if (pingable.Equals(true))
{
TreeNode servernameNode = new TreeNode(line);
computer.Pingable = "Server is online";
//3
//var drives = GetDrives(line, domaintextBox3.Text, usernametextBox1.Text, passwordtextBox2.Text);
List<string> drives = new List<string>();
Task drivesTask = new Task(() => drives = GetDrives(line, domaintextBox3.Text, usernametextBox1.Text, passwordtextBox2.Text));
computer.Drives.AddRange(drives);
drivesTask.Start();
drivesTask.Wait();
//4
foreach (string drive in drives)
{
//TreeNode driveNode = new TreeNode(drive);
//5
string fragNeeded = string.Empty;
//var fragNeeded = GetFragPercentage(line, drive, usernametextBox1.Text, passwordtextBox2.Text);
Task fragNeededTask = new Task(() => fragNeeded = GetFragPercentage(line, drive, usernametextBox1.Text, passwordtextBox2.Text));
fragNeededTask.Start();
fragNeededTask.Wait();
//var fragPercentage = GetFragPercentage(line, drive, usernametextBox1.Text, passwordtextBox2.Text);
if (fragNeeded.Equals("True"))
{
TreeNode driveNode = new TreeNode(drive);
driveNode.BackColor = Color.Red;
driveNode.Checked = true;
servernameNode.Checked = true;
InsertIntoTree2(servernameNode, driveNode);
}
if (fragNeeded.Equals("False"))
{
TreeNode driveNode = new TreeNode(drive);
driveNode.BackColor = Color.Green;
InsertIntoTree2(servernameNode, driveNode);
}
}
Servers.Add(computer);
InsertIntoTree(servernameNode);
//treeListView1.UpdateObjects(Servers);
treeListView1.RefreshObject(computer);
}
}
アップデート:
列エディターでアスペクト値を割り当てていませんでしたが、これを修正したので、ノードにテキストが表示されました! 私の問題は、実際には子ノード (ドライブ ノード) にあり、それらは期待どおりに表示されません (展開可能)。