之前我使用过vb.net,想要探索c#。 (他们说c#比vb.net好)但是无论如何......我在vb.net中使用下面的代码调用父窗口中的控件。
Dim strWindowToLookFor As String = GetType(MainWindowForm).Name
Me.Close()
Dim win = (From w In Application.Current.Windows Where DirectCast(w, Window).GetType.Name = strWindowToLookFor Select w).FirstOrDefault
If win IsNot Nothing Then
DirectCast(win, MainWindowForm).imglogin.Visibility = Windows.Visibility.Visible
DirectCast(win, MainWindowForm).Focus()
End If
我之前在其他论坛找到了这段代码并在vb.net中帮了我很多...但是现在我想在c#中使用这段代码来调用控件...所以我用SharpDevelop转换它(很好软件)....
string strWindowToLookFor = typeof(MainWindowForm).Name;
this.Close();
var win = (from w in Application.Current.Windowswhere ((Window)w).GetType().Name == strWindowToLookForw).FirstOrDefault;
if (win != null) {
((MainWindowForm)win).imglogin.Visibility = System.Windows.Visibility.Visible;
((MainWindowForm)win).Focus();
}
问题是它给了我一个错误:
错误1无法找到源类型“System.Windows.WindowCollection”的查询模式的实现。 '哪里'找不到。考虑明确指定范围变量'w'的类型。
错误#1突出显示了Application.Current.Windows。
错误2查询正文必须以select子句或组子句结束
答案 0 :(得分:1)
我认为你真的不需要在这里使用反射。你可以尝试一些更简单的东西:
var mainWindow = Application.Current.Windows.OfType<MainWindowForm>()
.FirstOrDefault();
if (mainWindow != null)
{
//Visibility stuff goes here
}
答案 1 :(得分:0)
from w in Application.Current.Windowswhere
from w in Application.Current.Windows where
var win = (from w in Application.Current.Windows where ((Window)w).GetType().Name == strWindowToLookForw select w).FirstOrDefault()
编辑:上面应该是完全修改的行。添加了“where”条件的空间并添加了“select”语句。
谨慎提醒:工具和样本旨在帮助理解,它们不能替代它。请务必阅读并理解您遇到的样本以及工具生成/转换。
而且C#并不比VB.Net“更好”,它在同一平台上是一种不同的语言。当然,很多人会认为它更好。 :)