From a5e9edb2e545252cbf75c7e366e60c76ff0712e2 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 29 Jul 2022 20:59:07 +0800 Subject: [PATCH 1/2] CheckForDotNetVersion --- v2rayN/v2rayN/Forms/MainForm.cs | 10 ++++++++-- v2rayN/v2rayN/Resx/ResUI.Designer.cs | 9 +++++++++ v2rayN/v2rayN/Resx/ResUI.resx | 3 +++ v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx | 3 +++ v2rayN/v2rayN/Tool/Utils.cs | 2 +- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index eff1d682..086c41df 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -87,6 +87,12 @@ namespace v2rayN.Forms MainFormHandler.Instance.RegisterGlobalHotkey(config, OnHotkeyHandler, UpdateTaskHandler); _ = LoadV2ray(); + + if (!Utils.CheckForDotNetVersion()) + { + UI.ShowWarning(ResUI.NetFrameworkRequirementsTip); + AppendText(false, ResUI.NetFrameworkRequirementsTip); + } } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) @@ -340,7 +346,7 @@ namespace v2rayN.Forms if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0) { lvServers.Items[index].Selected = true; - lvServers.EnsureVisible(index); // workaround + lvServers.SetScrollPosition(index); } } @@ -1139,7 +1145,7 @@ namespace v2rayN.Forms if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0) { lvServers.Items[index].Selected = true; - lvServers.EnsureVisible(index); // workaround + lvServers.SetScrollPosition(index); } SetVisibleCore(true); diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index 789e013c..194e520b 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -708,6 +708,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Normal use of this version requires .NET Framework 4.8 的本地化字符串。 + /// + internal static string NetFrameworkRequirementsTip { + get { + return ResourceManager.GetString("NetFrameworkRequirementsTip", resourceCulture); + } + } + /// /// 查找类似 Non-VMess or ss protocol 的本地化字符串。 /// diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index 0aa08ec9..c329bf6c 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -472,4 +472,7 @@ Servers (Filter : {0}) + + Normal use of this version requires .NET Framework 4.8 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index f4c8cc69..d76eacd5 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -472,4 +472,7 @@ 服务器 (过滤器 : {0}) + + 正常使用此版本需要.NET Framework 4.8,请更新后重启 + \ No newline at end of file diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index 54f65f35..c3fd29b5 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -694,7 +694,7 @@ namespace v2rayN /// /// 需要的版本4.6.2=394802;4.8=528040 /// - public static bool GetDotNetRelease(int release) + public static bool CheckForDotNetVersion(int release = 528040) { const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"; using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)) From 5aa27c14c63234de94a197ade6258bdb12a95b1d Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 29 Jul 2022 20:59:12 +0800 Subject: [PATCH 2/2] Update ListViewFlickerFree.cs --- v2rayN/v2rayN/Base/ListViewFlickerFree.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/v2rayN/v2rayN/Base/ListViewFlickerFree.cs b/v2rayN/v2rayN/Base/ListViewFlickerFree.cs index 4d34e2c0..94e803e9 100644 --- a/v2rayN/v2rayN/Base/ListViewFlickerFree.cs +++ b/v2rayN/v2rayN/Base/ListViewFlickerFree.cs @@ -93,5 +93,20 @@ namespace v2rayN.Base DoDragDrop(e.Item, DragDropEffects.Move); InsertionMark.Index = -1; } + public void SetScrollPosition(int pos) + { + pos = Math.Min(Items.Count - 1, pos); + + if (pos < 0 || pos >= Items.Count) + return; + + EnsureVisible(pos); + + for (int i = 0; i < 10; i++) + { + if (TopItem != null && TopItem.Index != pos) + TopItem = Items[pos]; + } + } } } \ No newline at end of file