C# 在当前窗口中插入另一个项目
我正在创建一个带有菜单的WPF应用程序,当单击菜单项时,我想在我的窗口(插件)中显示nqueen(另一个项目)。我已在我的当前目录中放置了一个NQueens.dll以供使用。为了实现这一点,我创建了一个assembly对象来加载类,并创建了一个Nqueens.Nqueen实例并调用了这些方法 NQueen项目由一个类NQueen.cs和一个主窗口组成C# 在当前窗口中插入另一个项目,c#,wpf,plugins,reflection,C#,Wpf,Plugins,Reflection,我正在创建一个带有菜单的WPF应用程序,当单击菜单项时,我想在我的窗口(插件)中显示nqueen(另一个项目)。我已在我的当前目录中放置了一个NQueens.dll以供使用。为了实现这一点,我创建了一个assembly对象来加载类,并创建了一个Nqueens.Nqueen实例并调用了这些方法 NQueen项目由一个类NQueen.cs和一个主窗口组成 namespace NQueens { public class NQueen { public static bool berekenQu
namespace NQueens
{
public class NQueen
{
public static bool berekenQueens(int Row, int N, bool[,] bord)
{
if (Row >= N) return true; //stopconditie
for (int Col = 0; Col < N; Col++)
{
//Q toevoegen
bord[Row, Col] = true;
//Q + Q volgende Row controleren
if (bordValidatie(Row, Col, bord, N) && berekenQueens(Row + 1, N, bord))
{
return true;
}
//Q verwijderen indien niet door controle
bord[Row, Col] = false;
}
return false;
}
private static bool bordValidatie(int currentRow, int currentCol, bool[,] currentBord, int N)
{
int colstep = 1;
for (int i = currentRow - 1; i >= 0; i--)
{
//rechte lijn
if (currentBord[i, currentCol])
return false;
//linker diagonaal
if (currentCol - colstep >= 0)
{
if (currentBord[i, currentCol - colstep])
return false;
}
//rechter diagonaal
if (currentCol + colstep < N)
{
if (currentBord[i, currentCol + colstep])
return false;
}
colstep += 1;
}
return true;
}
}
}
我不知道现在该怎么办。单击菜单项时,如何在当前窗口中显示NQueen程序 NQueen类应该是任何类型的wpf控件子体。如果它是一个简单的类,它无法与其容器通信。因此您应该实例化NQueens.MainWindow而不是NQueens.NQueen,并调用Show方法。顺便说一句,如果您的代码和注释是英语的,这会有所帮助,这里的大多数人不会说荷兰语。NQueens项目可以工作,因此,一些注释或方法是否使用荷兰语并不重要。唯一的问题是在安托弗项目中实施NQueens项目。
namespace NQueens
{
public partial class MainWindow : Window
{
public int iN { get { return Convert.ToInt32(txtN.Text); } set { txtN.Text = "" + value; } }
private bool[,] spelbord;
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
spelbord = new bool[iN, iN];
NQueen.berekenQueens(0, iN, spelbord);
visualise(iN, spelbord);
}
private void visualise(int N, bool[,] bord)
{
gridTekenen();
for (int row = 0; row < N; row++)
{
for (int col = 0; col < N; col++)
{
Rectangle rect = new Rectangle();
rect.Stretch = Stretch.Fill;
TextBlock txtB = new TextBlock();
if (spelbord[row, col])
{
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Colors.LightGreen;
rect.Fill = mySolidColorBrush;
txtB.Text = "Q";
}
rect.SetValue(Grid.ColumnProperty, col);
rect.SetValue(Grid.RowProperty, row);
txtB.SetValue(Grid.ColumnProperty, col);
txtB.SetValue(Grid.RowProperty, row);
gridPaneel.Children.Add(rect);
gridPaneel.Children.Add(txtB);
}
}
}
private void gridTekenen()
{
gridPaneel.ShowGridLines = true;
int grooteGrid = int.Parse(txtN.Text);
RowDefinition rowDef;
ColumnDefinition colDef;
for (int i = 0; i < grooteGrid; i++)
{
rowDef = new RowDefinition();
GridLengthConverter myGridLengthConverter = new GridLengthConverter();
GridLength gl1 = (GridLength)myGridLengthConverter.ConvertFromString(150 + "*");
rowDef.Height = gl1;
colDef = new ColumnDefinition();
colDef.Width = gl1;
gridPaneel.RowDefinitions.Add(rowDef);
gridPaneel.ColumnDefinitions.Add(colDef);
}
}
}
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
// Create an assembly object to load our classes
string path = System.Environment.CurrentDirectory + "\\NQueens.dll";
Assembly ass = Assembly.LoadFile(path);
Console.WriteLine(path);
Type objType = ass.GetType("NQueens.NQueen");
// Create an instace of NQueens.NQueen
var instance = Activator.CreateInstance(objType);
// public static bool berekenQueens(int Row, int N, bool[,] bord)
var result = objType.InvokeMember("berekenQueens",BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
null, instance, new object[] { 1, /* Row */ 1, /* N */ new bool[,] { {true,false} } /* bord */
});
// private static bool bordValidatie(int currentRow, int currentCol, bool[,] currentBord, int N)
var result2 = objType.InvokeMember("bordValidatie", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic,
null, instance, new object[] { 1, /* Row */ 1, /* N */ new bool[,] { {true,false} } /* bord */, 1
});
}