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 に答える