【转载】C# 字符转换

字符转ASCII码:

public static int Asc(string character)
  {
   if (character.Length == 1)
   {
    System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
    int intAsciiCode = (int)asciiEncoding.GetBytes(character)[0];
    return (intAsciiCode);
   }
   else
   {
    throw new Exception("Character is not valid.");
   }

  }

ASCII码转字符:

public static string Chr(int asciiCode)
  {
   if (asciiCode >= 0 && asciiCode <= 255)
   {
    System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
    byte[] byteArray = new byte[] { (byte)asciiCode };
    string strCharacter = asciiEncoding.GetString(byteArray);
    return (strCharacter);
   }
   else
   {
    throw new Exception("ASCII Code is not valid.");
   }
  }

<think>我们正在处理的问题:将C#字符串转换为按键控件名称(KeyControlName)根据用户提供的引用和问题,我们需要将字符串(如"Enter")转换为对应的Keys枚举值,例如Keys.Enter。在C#中,Keys是一个枚举类型,我们可以使用Enum.Parse或Enum.TryParse方法将字符串转换为枚举值。步骤:1.确保字符串与Keys枚举中的名称匹配(注意大小写和命名一致性)。2.使用Enum.Parse或Enum.TryParse进行转换。示例代码:假设我们有一个字符串str,要转换为Keys枚举值。使用Enum.Parse(如果字符串有效,则返回对应的枚举值;如果无效,则抛出异常):Keyskey=(Keys)Enum.Parse(typeof(Keys),str);使用Enum.TryParse(更安全,不会抛出异常):if(Enum.TryParse<Keys>(str,outKeysresult)){//使用result}else{//处理转换失败的情况}注意:Keys枚举在System.Windows.Forms命名空间中,所以需要添加对System.Windows.Forms的引用(在非WindowsForms项目中,可能需要额外配置)。但是,用户的问题中提到了“按键控件名称”,可能是指WindowsForms中的键盘按键。另外,用户提供的引用[1]中使用了Keys.ControlKey,Keys.V,Keys.Enter等,这些正是Keys枚举的成员。因此,我们可以直接使用上述方法将字符串转换为Keys枚举。另外,用户引用[1]中有一个方法SimulateKeyboarCopy,它使用了keybd_event函数(这是一个Win32API)来模拟键盘事件。在模拟按键时,需要传入一个虚拟键码(byte类型),而Keys枚举的值可以直接转换为byte使用。所以,如果用户想要模拟按键,并且有一个字符串表示按键名称(如"Enter"),那么我们可以这样转换:代码示例:stringkeyName="Enter";//用户输入的字符串if(Enum.TryParse<Keys>(keyName,outKeyskeyValue)){bytekeyCode=(byte)keyValue;//然后可以使用keybd_event模拟按键keybd_event(keyCode,0,0,0);//按下keybd_event(keyCode,0,2,0);//释放}else{//无法识别的按键名称}注意:有些按键名称可能包含空格或其他字符(如“ControlKey”),但Keys枚举中对应的成员名是“ControlKey”。用户需要确保字符串与枚举成员名完全一致(包括大小写,因为Enum.TryParse默认是区分大小写的)。如果不一致,可以尝试忽略大小写,通过传递第三个参数为true。例如:Enum.TryParse<Keys>(keyName,true,outKeysresult)因此,我们给出一个更健壮的方法:stringkeyName="controlkey";//假设用户输入的是小写,我们忽略大小写if(Enum.TryParse<Keys>(keyName,true,outKeyskeyValue)){//转换成功}但是,注意Keys枚举中有一些特殊的键,如“.”(句点)对应的枚举成员是OemPeriod,而用户可能输入的是“Period”或“Dot”,这时就需要额外的映射。所以,如果用户输入的字符串不是标准的枚举名称,我们可能需要一个自定义映射。不过,根据问题描述,用户希望将字符串转换为按键控件名称,即Keys枚举。因此,我们假设用户输入的字符串是Keys枚举中存在的名称(不区分大小写)。总结步骤:1.引入System.Windows.Forms命名空间(需要添加对System.Windows.Forms.dll的引用)。2.使用Enum.TryParse<Keys>进行转换(忽略大小写)。代码示例:usingSystem.Windows.Forms;//...publicKeys?ConvertStringToKey(stringkeyName){if(Enum.TryParse<Keys>(keyName,true,outKeyskeyValue)){returnkeyValue;}returnnull;//或者抛出异常,根据需求}如果是在非WindowsForms项目(如WPF、控制台)中使用,需要添加对System.Windows.Forms的引用。在.NETCore中,可以通过NuGet安装System.Windows.Forms。但是,如果用户不想添加对System.Windows.Forms的引用(例如在WPF中),则可以使用System.Windows.Input中的Key枚举(但注意,用户引用[1]中使用了Keys,所以这里我们按照用户上下文使用Keys)。根据用户提供的引用[1]中的代码,他们是在使用System.Windows.Forms.Keys。因此,我们按照这个方向回答。相关问题:1.如何将字符串转换为枚举值?2.在C#中如何模拟键盘按键?3.如何处理转换失败的情况?4.如何在不添加System.Windows.Forms引用的情况下处理按键枚举?(如果项目类型不允许)5.如何将多个按键组合(如Ctrl+V)一起模拟?下面我们生成回答。</think>### 将C#字符串转换为按键控件名称 在C#中,将字符串转换为`Keys`枚举值(即按键控件名称)可通过`Enum.Parse`或`Enum.TryParse`实现。以下是具体方法及注意事项: #### 方法1:使用`Enum.Parse`(直接转换) ```csharp using System.Windows.Forms; // 需要引用System.Windows.Forms string keyName = "Enter"; // 输入字符串 Keys key = (Keys)Enum.Parse(typeof(Keys), keyName, true); // 忽略大小写 byte keyCode = (byte)key; // 转换为虚拟键码(用于模拟按键) ``` #### 方法2:使用`Enum.TryParse`(安全转换) ```csharp if (Enum.TryParse<Keys>("ControlKey", true, out Keys result)) // 忽略大小写 { Console.WriteLine($"转换成功: {result} (键码:{(byte)result})"); } else { Console.WriteLine("无效的按键名称"); } ``` #### 注意事项: 1. **命名空间依赖** 需添加`System.Windows.Forms`程序集引用。在`.csproj`文件中添加: ```xml <ItemGroup> <Reference Include="System.Windows.Forms" /> </ItemGroup> ``` 2. **键名匹配规则** - 字符串必须与`Keys`枚举成员名称一致(如`"Escape"`而非`"Esc"`) - 不区分大小写(通过`ignoreCase:true`参数) - 特殊键需用完整名(如`"ControlKey"`而非`"Ctrl"`) 3. **常见键名示例**: | 字符串输入 | 对应`Keys`枚举 | 虚拟键码 | |------------|----------------|----------| | `"Enter"` | `Keys.Enter` | `13` | | `"Space"` | `Keys.Space` | `32` | | `"F1"` | `Keys.F1` | `112` | #### 应用场景(模拟按键): ```csharp // 将字符串转换为按键并模拟按下(参考引用[1]) void SimulateKeyPress(string keyName) { if (Enum.TryParse<Keys>(keyName, true, out Keys key)) { byte keyCode = (byte)key; keybd_event(keyCode, 0, 0, 0); // 按下 keybd_event(keyCode, 0, 2, 0); // 释放 } } ``` #### 错误处理建议: - 无效键名时捕获异常: ```csharp try { Keys key = (Keys)Enum.Parse(typeof(Keys), "InvalidKey"); } catch (ArgumentException) { // 处理无效键名 } ``` - 使用`Enum.GetNames(typeof(Keys))`获取所有合法键名列表 --- ### 相关问题 1. **如何获取`Keys`枚举中的所有合法键名列表?** 2. **在非Windows Forms项目中(如WPF)如何实现字符串到按键的转换?** 3. **如何模拟组合键(如Ctrl+V)?** 4. **当按键名称存在歧义时(如“Ctrl” vs “ControlKey”)如何处理?** 5. **如何将虚拟键码反向转换为字符串键名?** [^1]: Clipboard.SetText(str);// 将字符串复制到window剪贴板 // 传入字符串,复制到剪贴板,并通过模拟键盘Ctrl+V粘贴 public void SimulateKeyboarCopy(string temp) { // 复制到剪贴板 Clipboard.SetText(temp); // Ctrl+V keybd_event((byte)Keys.ControlKey, 0, 0, 0); keybd_event((byte)Keys.V, 0, 0, 0); keybd_event((byte)Keys.ControlKey, 0, 2, 0); keybd_event((byte)Keys.V, 0, 2, 0); // 回车 keybd_event((byte)Keys.Enter, 0, 0, 0); // 模拟按下 keybd_event((byte)Keys.Enter, 0, 2, 0); // 模拟释放 } [^2]: public static void GetInfo() { //获取特定目录guid local信息 这里以dll为例子 var dDll = new Dictionary<string, string>(); var monoBehaviours = Resources.FindObjectsOfTypeAll<MonoScript>(); foreach (var m in monoBehaviours) { if (m == null || m.GetClass() == null) continue; var path = AssetDatabase.GetAssetPath(m); if (path.StartsWith(DLLPath))//dll所在目录 过滤条件等 { var localID = GetLocalID(m); var GUID = AssetDatabase.AssetPathToGUID(path); dDll.Add(m.GetClass().FullName, $" m_Script: {{fileID:{localID}, guid: {GUID}, type:3}}"); } } //Debug.Log(dDll); } [^3]: C#语言实例源码系列-虚拟键盘。📢作者:小空和小芝中的小空 📢转载说明-务必注明来源:https://zhima.blog.youkuaiyun.com/ 📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值