RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-526739

Chaos_Sower's questions

Martin Hope
Chaos_Sower
Asked: 2024-09-06 02:34:35 +0000 UTC

如何使用掩码允许渐进文本输入?

  • 6

Regex是一个强大的工具,可让您检查是否符合给定的面罩。

从该版本开始, .NET 7.0 引入了对源生成器 RegexGenerator的支持- 我在代码中使用它。

为了深入了解上下文,我们来验证的电话号码PhoneNumberTextBox。

例如,如果给出以下内容Regex:

/// <summary>
/// <see cref="Regex"/>, которому соответствует только формат "+7 (XXX) XXX-XX-XX"
/// </summary>
/// <returns>Соответствие маске номера телефона</returns>
[GeneratedRegex(@"^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$")]
private static partial Regex PhoneNumberOnlyRegex();

以及验证方法如下:

/// <summary>
/// Метод, проверяющий соответствие текста заданному <see cref="Regex"/>
/// </summary>
/// <param name="Text">Проверяемый текст</param>
/// <param name="Regex">Проверяющий <see cref="Regex"/></param>
/// <returns>Значение <see cref="bool"/> соответствия текста маске</returns>
private static bool IsTextAllowed(string Text, Regex Regex)
{
    return Regex.IsMatch(Text);
}

然后我们可以像这样使用这个方法:

if (!IsTextAllowed(PhoneNumberTextBox.Text, PhoneNumberOnlyRegex()))
{
    PhoneNumberTextBox.BorderBrush = Brushes.Red;
}

这种方法一直有效,直到我们必须检查输入序列而不是整个字符串的正确性。这就是问题出现的时候。

例如:

线路+ 7 (000) 000-00-00将接通Regex,但是如果您需要检查用户拨打的电话号码是否正确怎么办?他一拨通+, Regex 就会开始咒骂。

在某些情况下这可能看起来是一个小问题,但是如果开发者需要控制用户输入的每个字符,UI防止用户输入错误的字符怎么办?例如,通过事件PreviewTextInput和 Pasting元素TextBox?

顺便说一句,该事件还出现了另一个问题PreviewTextInput:它不处理用户输入的空格,而仅对输入的字符做出反应。这种情况该怎么办?

c#
  • 2 个回答
  • 110 Views
Martin Hope
Chaos_Sower
Asked: 2024-09-05 06:27:25 +0000 UTC

DataGrid 中的单元格对齐方式不正确

  • 5

有一种风格HorizontallyCenteredCellStyle:

<Style x:Key="HorizontallyCenteredCellStyle" TargetType="DataGridCell">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

风格LeftAlignedCellStyle:

<Style x:Key="LeftAlignedCellStyle" TargetType="DataGridCell" BasedOn="{StaticResource HorizontallyCenteredCellStyle}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Left"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
     </Setter>
</Style>

DataGrid还有从数据库加载数据的Xaml 标记:

<DataGrid x:Name="ObserveContactsPageDataGrid" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True">
    
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource HorizontallyCenteredHeaderStyle}"/>
    </DataGrid.ColumnHeaderStyle>
    
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell" BasedOn="{StaticResource HorizontallyCenteredCellStyle}"/>
    </DataGrid.CellStyle>
    
    <DataGrid.Columns>
        <DataGridTextColumn Header="№" Binding="{Binding ID}" Width="Auto"/>
        <DataGridTextColumn Header="Номер телефона" Binding="{Binding PhoneNumber}" Width="Auto"/>
        <DataGridTextColumn Header="Тип телефона" Binding="{Binding PhoneType}" Width="Auto"/>
        <DataGridTextColumn Header="Имя" Binding="{Binding Name}" CellStyle="{StaticResource LeftAlignedCellStyle}" Width="100"/>
        <DataGridTextColumn Header="Фамилия" Binding="{Binding Surname}" CellStyle="{StaticResource LeftAlignedCellStyle}" Width="100"/>
        <DataGridTextColumn Header="Отчество" Binding="{Binding Patronymic}" Width="Auto"/>
        <DataGridTextColumn Header="Пол" Binding="{Binding Sex}" Width="Auto"/>
    </DataGrid.Columns>
    
</DataGrid>

数据单元格与原始代码正确对齐: DataGrid 中数据的正确显示

但是,一旦取消“名字”和“姓氏”列单元格的左对齐,文本就会立即开始移动:

<!-- Стиль выравнивания влево убран -->
<DataGridTextColumn Header="Имя" Binding="{Binding Name}" Width="100"/>
<DataGridTextColumn Header="Фамилия" Binding="{Binding Surname}" Width="100"/>

DataGrid 中的数据显示不正确

尽管它应该与中心对齐,就像其他扬声器(成功地)发生的那样。

为什么这种情况只发生在这些扬声器上?这和什么有关系呢?

wpf
  • 1 个回答
  • 39 Views
Martin Hope
Chaos_Sower
Asked: 2024-09-04 20:41:39 +0000 UTC

尝试通过实体框架操作数据时抛出异常

  • 6

有一个数据上下文类ApplicationContext.cs:

internal class ApplicationContext : DbContext
{
    public DbSet<Contact>? Contacts { get; set; }
    
    public DbSet<PhoneType>? PhoneTypes { get; set; }
    
    public DbSet<ContactInfo>? ContactsInfo { get; set; }
    
    public ApplicationContext() : base("Data Source=XXX;Initial Catalog=ContactsNotebookDB;Integrated Security=True;TrustServerCertificate=True")
    {
        Database.CreateIfNotExists();
    }
}

记录详情:

Contact.cs:

internal class Contact : IDatabase
{
    public required int ID { get; set; }
    
    public required string PhoneNumber { get; set; }
    
    public int? PhoneTypeID { get; set; }
    
    public required int ContactInfoID { get; set; }
}

ContactInfo.cs:

[Table("ContactsInfo")] // обязательное явное указание названия таблицы
(по умолчанию EF читает как "ContactInfoes")
internal class ContactInfo : IDatabase
{
    public required int ID { get; set; }
    
    public required string Name { get; set; }
    
    public required string Surname { get; set; }
    
    public string? Patronymic { get; set; }
    
    public required char Sex { get; set; }
}

当我尝试在其中之一的代码中保存数据View时,发生异常:

using ApplicationContext ApplicationContext = new();

int ContactsInfoMaxID = ApplicationContext.ContactsInfo.Count();
int ContactsMaxID = ApplicationContext.Contacts.Count();

ContactInfo ContactInfo = new()
{
    ID = ContactsInfoMaxID + 1,
    Name = NameTextBox.Text,
    Surname = SurnameTextBox.Text,
    Patronymic = Patronymic,
    Sex = SexComboBox.Text[0]
};

Contact Contact = new()
{
    ID = ContactsMaxID + 1,
    PhoneNumber = PhoneNumberTextBox.Text,
    PhoneTypeID = PhoneTypeComboBox.SelectedIndex,
    ContactInfoID = ContactInfo.ID,
};

ApplicationContext.ContactsInfo.Add(ContactInfo);
ApplicationContext.Contacts.Add(Contact);

ApplicationContext.SaveChanges(); // тут возникает исключение при сохранении

尝试添加记录时出现异常

该行ApplicationContext.SaveChanges();抛出以下异常:

System.Data.Entity.Infrastructure.DbUpdateException: "An error occurred while updating the entries. See the inner exception for details."

还有 2 个内部异常:

UpdateException: An error occurred while updating the entries. See the inner exception for details.

SqlException: Не удалось вставить значение NULL в столбец "ID", таблицы "ContactsNotebookDB.dbo.Contacts"; в столбце запрещены значения NULL. Ошибка в INSERT.
Выполнение данной инструкции было прервано.

问题更新:

当您尝试从数据库中删除记录时,也会发生异常。

包含尝试删除数据ViewModel的方法的代码片段:

/// <summary>
/// Команда удаления контакта
/// </summary>
/// <param name="parameter"></param>
private void DeleteContact(object parameter)
{
    MessageBoxResult DeleteContactMessageBoxResult = MessageBox.Show($"Внимание, вы действительно хотите удалить следующий контакт:\n\n{PhoneNumber}\n{Surname} {Name}{(Patronymic == "—" ? null : " " + Patronymic)}?", "Удаление контакта", MessageBoxButton.YesNo, MessageBoxImage.Warning);
    
    if (DeleteContactMessageBoxResult == MessageBoxResult.Yes)
    {
        using ApplicationContext ApplicationContext = new();
        
        bool IsContactInUse = ApplicationContext.Contacts.Any(Contact => Contact.ContactInfoID == ID);
        
        if (!IsContactInUse)
        {
            ApplicationContext.ContactsInfo?.Remove(ContactInfo);
        }
        
        else
        {
            Console.WriteLine("Текущий используется в Contact и не может быть удален.");
        }
        
        ApplicationContext.Contacts?.Remove(Contact);
        ApplicationContext.SaveChanges();
    }
}

尝试删除条目时出现异常

该行ApplicationContext.Contacts?.Remove(Contact);抛出异常:

System.InvalidOperationException: "The object cannot be deleted because it was not found in the ObjectStateManager."

附加信息:

  1. 版本Entity Framework- 6.5.1;
  2. 我对数据库条目的正确性充满信心,因为在通过调试进行检查期间,条目的目的是ApplicationContext: 向 ContactsInfo 添加条目

向联系人添加条目

已经很奇怪的是,ContactsInfo它只返回 1 条新记录,而Contacts它返回所有记录 + 一条新记录(顺便说一下,由于某种原因它被放置在表的顶部)。

即使我显式设置Null-данные,该条目仍然不会输入数据库,显示相同的异常。

PS我在添加的条目Contacts(属性PhoneTypeID)中看到0,我将其更正为1,但这并没有影响错误。

  1. debug 中的表达式ApplicationContext.ContactsInfo.Sql返回值:

    SELECT [范围 1].[ID] AS [ID]、[范围 1].[名称] AS [名称]、[范围 1].[姓氏] AS [姓氏]、[范围 1].[父名] AS [父名] FROM [ dbo].[联系人信息] AS [范围 1]

Sex也就是说,由于某种原因,数据库表中缺少一列。

  1. 我重新创建了数据库,创建了一个没有记录、没有关系的重复数据库,它没有主键和必填字段,但在这种情况下会引发另一个异常:

    System.Data.Entity.Infrastruct.DbUpdateConcurrencyException:“存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体以来,实体可能已被修改或删除。请参阅http://go.microsoft。 com/fwlink/?LinkId=472540了解有关理解和处理乐观并发异常的信息。”

和内部:

OptimisticConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.
  1. MS SQL 数据库中的表结构:

ContactsInfo:

ContactsInfo 表项目

Contacts:

联系人表项目

  1. 如果您尝试添加条目而不是添加到Contacts,而是添加到ContactsInfo并尝试保存更改,则会发生相同的异常,但具有不同的内部异常:

    SqlException:无法将 NULL 值插入表“ContactsNotebookDB.dbo.ContactsInfo”的列“Sex”;列中不允许有 NULL 值。插入错误。该指令被中止。

  2. 而且,好吧,从显而易见的角度来看,它当然ApplicationContext从数据库接收数据,因为它在访问它时返回正确的值(表及其记录的数量),所以问题不在于连接。

更新:

  1. 目前尚不清楚为什么该行ApplicationContext.Contacts?.Remove(Contact);会导致异常,因为联系人数据库中的数据已加载到ApplicationContext(尽管调试中的检查工作正常:它要么显示已加载Contacts,要么写入其编号为 0)。
c#
  • 1 个回答
  • 90 Views
Martin Hope
Chaos_Sower
Asked: 2022-12-23 23:16:27 +0000 UTC

确定图像是否包含在 RichTextBox C# (WinForms) 中

  • 5

这是摆在我面前的任务:判断RichTextBox中是否有图片。如何执行验证操作?

也许有这样的事情:

if (RichTextBox.Contains(Image))?

检查 RichTextBox.Text 中的字符时,Image 对象将转换为“”(空格)。如何正确检查图像是否存在?

c#
  • 1 个回答
  • 31 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5