RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 701412
Accepted
Игорь Ага
Игорь Ага
Asked:2020-08-03 18:02:56 +0000 UTC2020-08-03 18:02:56 +0000 UTC 2020-08-03 18:02:56 +0000 UTC

弯曲的进度条 c# WPF

  • 772

大佬们,告诉我如何制作一个半圆形的进度条?与往常一样,根本没有问题。我发现只有痛苦复杂的圆形例子在此处输入图像描述

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Андрей NOP
    2020-08-03T20:49:21Z2020-08-03T20:49:21Z

    它只是不会在这里,你必须对几何学很聪明。

    好吧,让我们创建UserControl,我称之为MyProgress。

    我们将画画Path。该控件将由两个组成Path- 已填充和未绘制(以不同颜色绘制)。为了简化计算,我取了一个半径为 100 且中心位于点 (100,100) 的椭圆。

    我们需要从中心绘制 2 条射线和一条弧线:

    <Path Fill="Blue" Stroke="Black">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="100,100">
                    <LineSegment Point="0,100"/>
                    <ArcSegment Point="170.71,29.29"
                                Size="100,100"
                                SweepDirection="Clockwise"/>
                    <LineSegment Point="100,100"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    

    我计算了 75% 占用选项的分数,这是我已经得到的: 一

    现在你需要从这个扇区切出一个直径较小的圆,我们将使用CombinedGeometry以下模式来完成Exclude:

    <Path Fill="Blue" Stroke="Black">
        <Path.Data>
            <CombinedGeometry GeometryCombineMode="Exclude">
                <CombinedGeometry.Geometry1>
                    <PathGeometry>
                        <PathFigure StartPoint="100,100">
                            <LineSegment Point="0,100"/>
                            <ArcSegment Point="170.71,29.29"
                                        Size="100,100"
                                        SweepDirection="Clockwise"/>
                            <LineSegment Point="100,100"/>
                        </PathFigure>
                    </PathGeometry>
                </CombinedGeometry.Geometry1>
                <CombinedGeometry.Geometry2>
                    <EllipseGeometry Center="100,100" RadiusX="80" RadiusY="80"/>
                </CombinedGeometry.Geometry2>
            </CombinedGeometry>
        </Path.Data>
    </Path>
    

    2个

    现在同样用不同的颜色绘制第二部分:

    <Path Fill="Cyan" Stroke="Black">
        <Path.Data>
            <CombinedGeometry GeometryCombineMode="Exclude">
                <CombinedGeometry.Geometry1>
                    <PathGeometry>
                        <PathFigure StartPoint="100,100">
                            <LineSegment Point="200,100"/>
                            <ArcSegment Point="170.71,29.29"
                                        Size="100,100"
                                        SweepDirection="Counterclockwise"/>
                            <LineSegment Point="100,100"/>
                        </PathFigure>
                    </PathGeometry>
                </CombinedGeometry.Geometry1>
                <CombinedGeometry.Geometry2>
                    <EllipseGeometry Center="100,100" RadiusX="80" RadiusY="80"/>
                </CombinedGeometry.Geometry2>
            </CombinedGeometry>
        </Path.Data>
    </Path>
    

    3个

    有了标记,现在就这些了,剩下的就是将计算点的坐标绑定到ArcSegment.

    我们看一下控制代码:

    依赖属性Value:

    public static DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double),
                        typeof(MyProgress), new FrameworkPropertyMetadata(OnValueChanged));
    

    具有圆弧点坐标的辅助依赖属性:

    protected static DependencyProperty AuxiliaryPointProperty = DependencyProperty.Register("AuxiliaryPoint",
                        typeof(Point), typeof(MyProgress));
    

    这些属性的标准包装器:

    public double Value
    {
        get => (double)GetValue(ValueProperty);
        set => SetValue(ValueProperty, value);
    }
    
    protected Point AuxiliaryPoint
    {
        get => (Point)GetValue(AuxiliaryPointProperty);
        set => SetValue(AuxiliaryPointProperty, value);
    }
    

    最后,一种在更改时重新计算点坐标的方法Value:

    static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var myProgress = (MyProgress)d;
        var value = (double)e.NewValue;
        var angle = Math.PI * value / 100;
        var x = 100 - 100 * Math.Cos(angle);
        var y = 100 - 100 * Math.Sin(angle);
        myProgress.AuxiliaryPoint = new Point(x, y);
    }
    

    现在,在标记中,我们将绑定到计算点:

    Point="{Binding ElementName=myProgress, Path=AuxiliaryPoint}"
    

    两者都需要这样做。ArcSegment

    在标记中,我为控件命名以简化绑定代码:

    <UserControl ...
                 Name="myProgress">
    

    一切。这已经是可以添加到窗口的最小工作进度条了:

    <local:MyProgress x:Name="Progress1" Value="0"/>
    

    看起来像这样:

    四

    请记住,为了使此控件或多或少具有通用性,您需要进一步细化它,例如,移动圆弧和背景颜色的依赖关系、进度条的最小值和最大值、进度条的直径外圈和内圈等进入属性。

    这是完整的控制代码MyProgress.xaml:

    <UserControl x:Class="WpfProgress.MyProgress"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                 mc:Ignorable="d" Name="myProgress">
        <Grid>
            <Path Fill="Blue" Stroke="Black">
                <Path.Data>
                    <CombinedGeometry GeometryCombineMode="Exclude">
                        <CombinedGeometry.Geometry1>
                            <PathGeometry>
                                <PathFigure StartPoint="100,100">
                                    <LineSegment Point="0,100"/>
                                    <ArcSegment Point="{Binding ElementName=myProgress, Path=AuxiliaryPoint}"
                                                Size="100,100" SweepDirection="Clockwise"/>
                                    <LineSegment Point="100,100"/>
                                </PathFigure>
                            </PathGeometry>
                        </CombinedGeometry.Geometry1>
                        <CombinedGeometry.Geometry2>
                            <EllipseGeometry Center="100,100" RadiusX="80" RadiusY="80"/>
                        </CombinedGeometry.Geometry2>
                    </CombinedGeometry>
                </Path.Data>
            </Path>
            <Path Fill="Cyan" Stroke="Black">
                <Path.Data>
                    <CombinedGeometry GeometryCombineMode="Exclude">
                        <CombinedGeometry.Geometry1>
                            <PathGeometry>
                                <PathFigure StartPoint="100,100">
                                    <LineSegment Point="200,100"/>
                                    <ArcSegment Point="{Binding ElementName=myProgress, Path=AuxiliaryPoint}"
                                                Size="100,100" SweepDirection="Counterclockwise"/>
                                    <LineSegment Point="100,100"/>
                                </PathFigure>
                            </PathGeometry>
                        </CombinedGeometry.Geometry1>
                        <CombinedGeometry.Geometry2>
                            <EllipseGeometry Center="100,100" RadiusX="80" RadiusY="80"/>
                        </CombinedGeometry.Geometry2>
                    </CombinedGeometry>
                </Path.Data>
            </Path>
        </Grid>
    </UserControl>
    

    MyProgress.xaml.cs:

    using System;
    using System.Windows;
    using System.Windows.Controls;
    
    namespace WpfProgress
    {
        public partial class MyProgress : UserControl
        {
            public MyProgress()
            {
                InitializeComponent();
            }
    
            public static DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double),
                                typeof(MyProgress), new FrameworkPropertyMetadata(OnValueChanged));
            protected static DependencyProperty AuxiliaryPointProperty = DependencyProperty.Register("AuxiliaryPoint",
                                typeof(Point), typeof(MyProgress));
    
            static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                var myProgress = (MyProgress)d;
                var value = (double)e.NewValue;
                var angle = Math.PI * value / 100;
                var x = 100 - 100 * Math.Cos(angle);
                var y = 100 - 100 * Math.Sin(angle);
                myProgress.AuxiliaryPoint = new Point(x, y);
            }
    
            public double Value
            {
                get => (double)GetValue(ValueProperty);
                set => SetValue(ValueProperty, value);
            }
    
            protected Point AuxiliaryPoint
            {
                get => (Point)GetValue(AuxiliaryPointProperty);
                set => SetValue(AuxiliaryPointProperty, value);
            }
        }
    }
    

    由于UserControl它是非语义的,我为ProgressBar. 然后我决定添加从标记编辑内半径的功能。但是改变控件行为的附加属性也是非语义的,所以最后我选择了Custom Control,继承自ProgressBar。

    思路和上面解决方案中描述的是一样的,但是现在控件已经完全敲定了(大概),所以标记因为一堆绑定变得更加复杂,也因为实现的模式Indeterminate。

    对于那些想要创建这样一个控件的人 - 添加到项目Add - New Item - Custom Control WPF中,我给它命名SemicircleProgressBar,控件本身的代码非常简单 - 添加了一个依赖属性:

    public class SemicircleProgressBar : ProgressBar
    {
        static SemicircleProgressBar()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(SemicircleProgressBar),
                new FrameworkPropertyMetadata(typeof(SemicircleProgressBar)));
        }
    
        public static DependencyProperty CuttingFactorProperty =
            DependencyProperty.Register(nameof(CuttingFactor), typeof(double),
                typeof(SemicircleProgressBar), new FrameworkPropertyMetadata(0.8));
    
        public double CuttingFactor
        {
            get => (double)GetValue(CuttingFactorProperty);
            set => SetValue(CuttingFactorProperty, value);
        }
    }
    

    在项目根目录下出现Generic.xaml的文件Themes中,标记出新控件的样式:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:WpfProgress"
                        xmlns:sys="clr-namespace:System;assembly=mscorlib">
    
        <Style TargetType="{x:Type local:SemicircleProgressBar}">
            <Style.Resources>
                <local:ValueToAuxiliaryPointConverter x:Key="ValueToAuxiliaryPointConverter"/>
                <local:RadiusToSizeConverter x:Key="RadiusToSizeConverter"/>
                <sys:Double x:Key="OneDouble">1.0</sys:Double>
                <sys:Double x:Key="ZeroDouble">0.0</sys:Double>
                <sys:Double x:Key="QuarterDouble">0.25</sys:Double>
                <SolidColorBrush x:Key="SPB.Progress" Color="#FF06B025"/>
                <SolidColorBrush x:Key="SPB.Background" Color="#FFE6E6E6"/>
                <SolidColorBrush x:Key="SPB.Border" Color="#FFBCBCBC"/>
            </Style.Resources>
            <Setter Property="Foreground" Value="{StaticResource SPB.Progress}"/>
            <Setter Property="Background" Value="{StaticResource SPB.Background}"/>
            <Setter Property="BorderBrush" Value="{StaticResource SPB.Border}"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:SemicircleProgressBar}">
                        <Grid>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Determinate"/>
                                    <VisualState x:Name="Indeterminate">
                                        <Storyboard RepeatBehavior="Forever">
                                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                                             Storyboard.TargetName="Animation"
                                                             From="0" To="135"
                                                             Duration="0:0:1"/>
                                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
                                                             Storyboard.TargetName="Animation"
                                                             From="135" To="0"
                                                             Duration="0:0:1" BeginTime="0:0:1"/>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Path Stretch="Uniform" Fill="{TemplateBinding Background}"
                                  Stroke="{TemplateBinding BorderBrush}"
                                  StrokeThickness="{TemplateBinding BorderThickness}">
                                <Path.Data>
                                    <CombinedGeometry GeometryCombineMode="Exclude">
                                        <CombinedGeometry.Geometry1>
                                            <PathGeometry>
                                                <PathFigure StartPoint="0,1">
                                                    <ArcSegment Size="1,1" Point="2,1" SweepDirection="Clockwise"/>
                                                </PathFigure>
                                            </PathGeometry>
                                        </CombinedGeometry.Geometry1>
                                        <CombinedGeometry.Geometry2>
                                            <EllipseGeometry Center="1,1"
                                                             RadiusX="{Binding CuttingFactor, RelativeSource={RelativeSource TemplatedParent}}"
                                                             RadiusY="{Binding CuttingFactor, RelativeSource={RelativeSource TemplatedParent}}"/>
                                        </CombinedGeometry.Geometry2>
                                    </CombinedGeometry>
                                </Path.Data>
                            </Path>
                            <Path Name="Indicator" Stretch="Uniform"
                                  Fill="{TemplateBinding Foreground}"
                                  Stroke="{TemplateBinding BorderBrush}"
                                  StrokeThickness="{TemplateBinding BorderThickness}">
                                <Path.Data>
                                    <PathGeometry>
                                        <PathFigure StartPoint="0,1">
                                            <ArcSegment Size="1,1" SweepDirection="Clockwise">
                                                <ArcSegment.Point>
                                                    <MultiBinding Converter="{StaticResource ValueToAuxiliaryPointConverter}">
                                                        <Binding Path="Value" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="Minimum" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="Maximum" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Source="{StaticResource OneDouble}"/>
                                                    </MultiBinding>
                                                </ArcSegment.Point>
                                            </ArcSegment>
                                            <LineSegment>
                                                <LineSegment.Point>
                                                    <MultiBinding Converter="{StaticResource ValueToAuxiliaryPointConverter}">
                                                        <Binding Path="Value" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="Minimum" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="Maximum" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="CuttingFactor" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                    </MultiBinding>
                                                </LineSegment.Point>
                                            </LineSegment>
                                            <ArcSegment Size="{Binding Path=CuttingFactor,
                                                                       RelativeSource={RelativeSource TemplatedParent},
                                                                       Converter={StaticResource RadiusToSizeConverter}}">
                                                <ArcSegment.Point>
                                                    <MultiBinding Converter="{StaticResource ValueToAuxiliaryPointConverter}">
                                                        <Binding Path="Minimum" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="Minimum" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="Maximum" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                        <Binding Path="CuttingFactor" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                    </MultiBinding>
                                                </ArcSegment.Point>
                                            </ArcSegment>
                                            <LineSegment Point="0,1"/>
                                        </PathFigure>
                                        <PathFigure StartPoint="0,0">
                                            <LineSegment Point="2,1" IsStroked="False"/>
                                        </PathFigure>
                                    </PathGeometry>
                                </Path.Data>
                            </Path>
                            <Path Name="Animation" Stretch="Uniform"
                                  Fill="{TemplateBinding Foreground}"
                                  Stroke="{TemplateBinding BorderBrush}"
                                  StrokeThickness="{TemplateBinding BorderThickness}"
                                  Visibility="Collapsed" RenderTransformOrigin="0.5,1">
                                <Path.Data>
                                    <PathGeometry>
                                        <PathFigure StartPoint="0,1">
                                            <ArcSegment Size="1,1" SweepDirection="Clockwise">
                                                <ArcSegment.Point>
                                                    <MultiBinding Converter="{StaticResource ValueToAuxiliaryPointConverter}">
                                                        <Binding Source="{StaticResource QuarterDouble}"/>
                                                        <Binding Source="{StaticResource ZeroDouble}"/>
                                                        <Binding Source="{StaticResource OneDouble}"/>
                                                        <Binding Source="{StaticResource OneDouble}"/>
                                                    </MultiBinding>
                                                </ArcSegment.Point>
                                            </ArcSegment>
                                            <LineSegment>
                                                <LineSegment.Point>
                                                    <MultiBinding Converter="{StaticResource ValueToAuxiliaryPointConverter}">
                                                        <Binding Source="{StaticResource QuarterDouble}"/>
                                                        <Binding Source="{StaticResource ZeroDouble}"/>
                                                        <Binding Source="{StaticResource OneDouble}"/>
                                                        <Binding Path="CuttingFactor" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                    </MultiBinding>
                                                </LineSegment.Point>
                                            </LineSegment>
                                            <ArcSegment Size="{Binding Path=CuttingFactor,
                                                                       RelativeSource={RelativeSource TemplatedParent},
                                                                       Converter={StaticResource RadiusToSizeConverter}}">
                                                <ArcSegment.Point>
                                                    <MultiBinding Converter="{StaticResource ValueToAuxiliaryPointConverter}">
                                                        <Binding Source="{StaticResource ZeroDouble}"/>
                                                        <Binding Source="{StaticResource ZeroDouble}"/>
                                                        <Binding Source="{StaticResource OneDouble}"/>
                                                        <Binding Path="CuttingFactor" RelativeSource="{RelativeSource TemplatedParent}"/>
                                                    </MultiBinding>
                                                </ArcSegment.Point>
                                            </ArcSegment>
                                            <LineSegment Point="0,1"/>
                                        </PathFigure>
                                        <PathFigure StartPoint="0,0">
                                            <LineSegment Point="2,1" IsStroked="False"/>
                                        </PathFigure>
                                    </PathGeometry>
                                </Path.Data>
                                <Path.RenderTransform>
                                    <RotateTransform/>
                                </Path.RenderTransform>
                            </Path>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsIndeterminate" Value="true">
                                <Setter Property="Visibility" TargetName="Indicator" Value="Collapsed"/>
                                <Setter Property="Visibility" TargetName="Animation" Value="Visible"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
    

    转换器。
    ValueToAuxiliaryPointConverter:

    class ValueToAuxiliaryPointConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values.Contains(DependencyProperty.UnsetValue))
                return DependencyProperty.UnsetValue;
            var v = (double)values[0];
            var min = (double)values[1];
            var max = (double)values[2];
            var r = (double)values[3];
            var ratio = (v - min) / (max - min);
            var angle = Math.PI * ratio;
            var x = 1 - r * Math.Cos(angle);
            var y = 1 - r * Math.Sin(angle);
            return new Point(x, y);
        }
    
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    RadiusToSizeConverter:

    class RadiusToSizeConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var r = (double)value;
            return new Size(r, r);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    演示代码:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
    
        <ProgressBar Name="ProgressBar1" Grid.Row="0" Grid.Column="0"
                     Value="75" Minimum="0" Maximum="100"
                     VerticalAlignment="Center" HorizontalAlignment="Center"
                     Height="100" Width="200"/>
    
        <ProgressBar Name="ProgressBar2" Grid.Row="1" Grid.Column="0"
                     IsIndeterminate="True"
                     VerticalAlignment="Center" HorizontalAlignment="Center"
                     Height="100" Width="200"/>
    
        <local:SemicircleProgressBar x:Name="SemiCpb1" Grid.Row="0" Grid.Column="1"
                                     Value="75" Minimum="0" Maximum="100"
                                     CuttingFactor="0.8"
                                     VerticalAlignment="Center" HorizontalAlignment="Center"
                                     Height="100" Width="200"/>
    
        <local:SemicircleProgressBar x:Name="SemiCpb2" Grid.Row="1" Grid.Column="1"
                                     IsIndeterminate="True"
                                     CuttingFactor="0.8"
                                     VerticalAlignment="Center" HorizontalAlignment="Center"
                                     Height="100" Width="200"/>
    </Grid>
    

    演示

    使用此答案中的信息

    • 15

相关问题

Sidebar

Stats

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

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +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
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +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