iT邦幫忙

0

[自己解決了]請問如何將字串名變成變數名

  • 分享至 

  • xImage

我有兩個webview分別為webview21、webview21,要在兩個讀完之後(NavigationCompleted),統一傳到FinishLoad,並在FinishLoad裡面將webview回去google首頁,請問有辦法達成這個嗎?不想再兩個裡面打上重複的指令/images/emoticon/emoticon02.gif
(剛接觸C#新手)

 private async void webView21_NavigationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
        {
            FinishLoad("webView21");
        }
 private async void webView22_NavigationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
        {
            FinishLoad("webView22");
        }
private async void FinishLoad(string webViewName){
  MessageBox.Show(webViewName+"跑完了");
  await webViewName.EnsureCoreWebView2Async(); 
  //webViewName變成webView21或是webView22
  webViewName.CoreWebView2.Navigate("https://www.google.com.tw");
}

自問自答/images/emoticon/emoticon38.gif

private async void FinishLoad(object sender){
  //MessageBox.Show(webViewName+"跑完了");
  WebView2 webview = (WebView2)sender;
  await webview.EnsureCoreWebView2Async();
  webview.CoreWebView2.Navigate("http://tw.yahoo.com");
  await webview.EnsureCoreWebView2Async();
}

另一個方法

Control[] contorl = this.Controls.Find("webView21",true);
WebView2 webview = (WebView2)contorl[0];
WebViewSetting(webview)

直接將這個送去到另一個function中處理

private async void WebViewSetting(WebView2 sender)
{
    WebView2 webView = (WebView2)sender;
    await webView.EnsureCoreWebView2Async();
    webView.CoreWebView2.Settings.AreDevToolsEnabled = false;
    return;
}
看更多先前的討論...收起先前的討論...
player iT邦大師 1 級 ‧ 2023-02-10 19:42:17 檢舉
C# 裡應該有用字串
找該ID的控制項的函數吧
找到後再轉型別
你就可以用了
因為我不知道你是寫哪一種程式(Windows Form,WPF,UWP)
所以用法你得自己找
mobone iT邦新手 5 級 ‧ 2023-02-10 19:44:37 檢舉
剛接觸,還在翻MSDN,卡在不知道哪個函數 XD,我用Windows Form
player iT邦大師 1 級 ‧ 2023-02-10 20:38:30 檢舉
你自己看怎麼用吧?
基本都是原本那層 Controls.Find(name,true) 的方式去找

用法的說明
https://learn.microsoft.com/zh-tw/dotnet/api/system.windows.forms.control.controlcollection.find

只是ControlCollection 是它的類別,它通常在控制項裡被命名為 Controls
找到的話
會是一個控制項的陣列
通常取第0個再轉型別就能用了
mobone iT邦新手 5 級 ‧ 2023-02-10 20:46:41 檢舉
有,我剛剛有找到這個也測試完了,正要補充,謝謝player大大
ccutmis iT邦高手 2 級 ‧ 2023-02-10 23:36:05 檢舉
讚~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-17 10:33:05
最佳解答

您可以使用 dynamic 關鍵字和 Reflection 來達成這個目的。請看下面的程式碼範例:

// 以動態方式取得控制項
string controlName = "webView21";
dynamic control = this.Controls.Find(controlName, true)[0];

// 呼叫方法
MethodInfo method = this.GetType().GetMethod("WebViewSetting");
method.Invoke(this, new object[] { control });

我要發表回答

立即登入回答