需要一些关于自定义字符表的帮助和提示

Posted

技术标签:

【中文标题】需要一些关于自定义字符表的帮助和提示【英文标题】:Need some help and tips with custom character sheet 【发布时间】:2021-06-15 15:10:57 【问题描述】:

我使用 c# 作为主要编程语言。将 EF 链接到 WPF 应用程序。 我想要的东西:保存\加载角色或/和玩家信息并使用它的可能性。 我有的东西:

带有玩家和角色表的本地数据库。 玩家有:

P_ID 
P_Name

人物有

id (int)
name (nvarchar50)
pid (int)
STR (int)
DEX (int)
INT (int)

我发现实体框架是我想要的很好的解决方案(至少我是这么认为的)。

目前我的角色和玩家类看起来像这样:

public class Character

    [Key]
    public int id  get; set; 
    public string name  get; set; 
    public int pid  get; set; 
    public int STR  get; set; 
    public int DEX  get; set; 
    public int INT  get; set; 

    [ForeignKey("pid")]
    public virtual Player Player  get; set; 


public class Player

    [Key]
    public int P_ID  get; set; 
    public string P_Name  get; set; 
    public virtual ICollection<Character> Characters  get; set; 

MyDBcontext 类:

public class MyDBcontext : DbContext

    public MyDBcontext() : base("Datasex_0._1.Properties.Settings.StraightCon")
    

    
    public DbSet<Player> Players  get; set; 
    public DbSet<Character> Characters  get; set; 

和 MainWindow.xaml.cs 代码:

public partial class MainWindow : Window

    MyDBcontext mdb;

    List<Player> playerlist = new List<Player>();
    List<Character> charlist = new List<Character>();
    
    public MainWindow()
    
        InitializeComponent();

        mdb = new MyDBcontext();
        mdb.Players.Load();
        mdb.Characters.Load();

        var charlist = mdb.Characters.ToList();
        var playerlist = mdb.Players.ToList();

        PlayerBox.ItemsSource = mdb.Players.ToList();

        CharacterData.ItemsSource = charlist;

        this.Closing += MainWindow1_Closed;
    

    private void MainWindow1_Closed(object sender, EventArgs e)
    
        mdb.Dispose();
    

我需要什么:

我已将用于测试目的的数据网格链接到一个列表。与此有关的问题:datagrid 显示这样的玩家:

我不需要玩家在 charlist 中。 为什么我需要列表 - 在这里我发现可以使用列表进行组合框比较。

我需要在玩家框(第一个组合框)中显示所有玩家 - 我做到了。 然后我需要在 Characterbox 组合框中显示通过 pid 绑定到玩家 P_ID 的字符。

在此之后,我需要在文本框中显示(我将在完成字符任务后添加)字符统计信息(str dex 和 int)。 然后我需要将自定义播放器添加到数据库的功能(我知道怎么做,因为在 winforms 应用程序中对其进行了测试)。

然后我需要在playerbox中根据选择的玩家添加自定义角色(我不知道怎么做)。

最后我需要能够在 UI 中更改字符信息(名称、str、dex 等)。

感谢您的帮助和提示,抱歉我的英语不好。

编辑: 添加了一些我认为不起作用的东西:

private string[] getcharbyid (int pid)
        
            return charlist.Where(Line => Line.pid == pid).Select(l => l.name).ToArray();
        

private void PlayerBox_SelectionChanged(对象发送者,SelectionChangedEventArgs e) if (CharacterBox != null) CharacterBox.Items.Clear();

    int xid = charlist[PlayerBox.SelectedIndex].pid;

    indextest.Content = xid;

    foreach (string name in getcharbyid(xid))
    
        this.CharacterBox.Items.Add(name);
    

应用程序启动时显示:System.ArgumentOutOfRangeException

这样比较 id 和 index:

PlayerData.ItemsSource = mdb.Players.ToList();
int xid = PlayerBox.SelectedIndex;

indextest.Content = xid;

似乎 id 和 index (或者我做错了什么)是相同的。 尝试更改 foreach 失败。

更改了一些代码以将字符添加到字符框:

    int xid;
    Int32.TryParse(PlayerBox.SelectedValue.ToString(), out xid);
    indextest.Content = xid;
    CharacterBox.Items.Add (from Character in charlist where Character.pid == xid select Character);
    CharacterBox.DisplayMemberPath = "name";
    CharacterBox.SelectedValuePath = "id";

看起来像是添加到组合框中的字符,但我没有看到它们的名称和值:

空字符组合框?

【问题讨论】:

如果我做错了什么并且有很多简单的方法可以做到这一点(比如扔掉 EF 和 stat 处理 sql 命令)会很高兴看到你的想法和建议。 【参考方案1】:

通过使用 LINQ 查询解决。我的想法是对的 - 有简单的解决方案!

【讨论】:

以上是关于需要一些关于自定义字符表的帮助和提示的主要内容,如果未能解决你的问题,请参考以下文章

有啥软件可以自定义字 也就是自己想写啥就写啥 并把写的字弄成

C++11 用户自定义字面值

Xcode 9:好奇的自定义字体行为

自定义字符类

51单片机1602自定义字符原理及示例(”汉“爱心及摄氏度示例)

为啥自定义字体会移动文本(更改垂直对齐方式)? [复制]