0

我以前用过 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 子句或 group 子句结尾

4

2 回答 2

1

我不认为你真的需要在这里使用反射。你可以尝试一些更简单的东西:

var mainWindow = Application.Current.Windows.OfType<MainWindowForm>()
                                            .FirstOrDefault();

if (mainWindow != null)
{
   //Visibility stuff goes here
}
于 2012-07-24T01:00:52.523 回答
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“更好”,它是同一平台上的不同语言。当然,很多人会认为它更好。:)

于 2012-07-24T00:37:04.180 回答