「ふぅ!」ついに解決!
これは、将来同じことをしようとする人のための解決策です。
「リスト」のインスタンスを作成し、メソッドを反復処理してそのようなリストに名前を割り当てます。SelectedItem
インデックス値が変更されるたびに呼び出すだけで、GetMethodBodyByName
この問題を確実に解決できます
関数を実装する方法は次のGetMethodBodyByName
とおりです。
public string GetMethodBodyByName(string methodName)
{
ModuleDefMD md = ModuleDefMD.Load(filename);
foreach (TypeDef type in md.Types)
{
foreach (MethodDef method in type.Methods)
{
for (int i = 0; i < type.Methods.Count; i++)
{
if (method.HasBody)
{
if (method.Name == methodName)
{
var instr = method.Body.Instructions;
return String.Join("\r\n", instr);
}
}
}
}
}
return "";
}
アイデアは、「GetMethodBodyByName」がメソッド名をパラメーターとして受け取り、メソッドを反復して、メソッドが指定された名前と一致するかどうかを確認し、見つかった場合、関数はそのメソッドを単純に反復し、メソッドの本体を出力するというものです.
私のListBox_SelectedItemChanged
イベントは次のようになります。
private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
textBox.Text = "";
textBox.Text = GetMethodBodyByName(method[listBox.SelectedIndex].Name);
}
それはすべての人々です!
注: 名前を要求する場合、異なるメソッドが同じ名前を持つ可能性があるため、このアプローチを行うときは注意してください。しかし、それは別の日のケーキです。今のところ完了です。気をつけてバイバイ!
究極のソリューションに向けて前進します!
WPF MainWindow フォームは、2 つの小さな便利なプロパティを持っていTag
ますContent
。
Tag
andプロパティを使用すると、このタスク専用のメソッド名に依存することなくContent
、後で取得できる任意の値を割り当てることができます。On-The-Fly
したがって、各メソッドをループしてそれぞれその名前を取得する代わりに、私が行った方法を実行できます。
メソッドを反復処理し、その本体をTag
プロパティに割り当て、その名前をプロパティに割り当てContent
ます。この最後のプロパティは実際のTitle
プロパティを処理するものであるため、将来メソッドで行うことはすべて無視します。別のものの同じ名前、それは何があっても機能します。
どのように実装できますか?
単に:
<...>
// Inside Method Body iteration routine...
<...>
var instr = mdInfo.Body.Instructions;
// Allocate in a new `ListBoxItem` each method and add it to the current listbox with their
// ... respective Tag and Content information... // Many Thanks Kao :D
newItem = new ListBoxItem();
newItem.Content = mdInfo.Name;
newItem.Tag = string.Join("\r\n", instr);
method.Add(mdInfo);
listBox.Items.Add(newItem);
次に、SelectedItem
Index-Value-Changed Event に次のように入力します。
MSILTextBox.Clear();
// Retrieve them given the selected index...
// ... the returned value will be the Tag content of the ...
// ... previously saved item.
string getTag= ((ListBoxItem)listBox.SelectedItem).Tag.ToString();
MSILTextBox.Text = getTag;