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