小编hmc*_*iii的帖子

通过XSD限制基于另一个元素的XML元素

我相信这与keyref我有关,但我不确定,我真的不确定它是否可以完成.

例如,假设我有myElement1和myElement2.如果XML文件中没有myElement2,则myElement1必须存在,否则它是可选的.

有没有办法在我的XSD文件中强制进行这种类型的验证?

xml xsd xsd-validation

10
推荐指数
1
解决办法
1万
查看次数

删除沙堡中的命名空间前缀

我有一个带有长名称空间的大型项目,例如

CompanyName.Product.Component.Class
Run Code Online (Sandbox Code Playgroud)

使用沙堡(Sandcastle)构建名称空间的文档,但是那些冗长的名称空间确实破坏了最终chm文件中内容窗格的显示。我如何才能使其Component.Class至少显示在Treeview面板中?

和/或也许具有CompanyName作为扩展到的根节点,Product然后扩展到Component,扩展到Component下的所有名称空间?

.net sandcastle namespaces

5
推荐指数
0
解决办法
490
查看次数

Python / Django通过Through节省m2m

更新:我创建了一个github回购,其中包含该问题的完整站点演示。也许我在下面的描述没有完全传达我正在尝试做的事情。

github仓库是:https : //github.com/theCodeJerk/m2m-through

非常感谢您提供的任何帮助。

下面的代码已精简以说明问题。尽管有些事情您可能想说“为什么您仍然要这样做”,但在较大的上下文中可能有一个原因:)

这是我的看法:

class SubmissionCreate(CreateView):
    model = Submission
    fields = '__all__'
    template_name_suffix = '_create_form'
    success_url = '/'
Run Code Online (Sandbox Code Playgroud)

这是相关的models.py代码:

def custom_filename(instance, filename):
    author = instance.publishers[0]
    return 'papers/{0}.pdf'.format(author.pseudonum)


class Submission(models.Model):
    name = models.CharField(
        max_length=200, 
        blank=False
        )
    upload = models.FileField(
        blank=True, 
        upload_to=custom_filename
        )
    publishers = models.ManyToManyField(
        'Publisher', 
        blank=False, 
        related_name='publisher_of', 
        through='SubmissionPublisher'
        )


class Publisher(models.Model):
    user = models.ForeignKey(
        User, blank=False, 
        on_delete=models.CASCADE
        )
    pseudonym = models.CharField(
        max_length=200,
        blank=False
        )


class SubmissionPublisher(models.Model):
    publisher = models.ForeignKey(
        'Publisher', 
        blank=False, 
        on_delete=models.CASCADE
        )
    submission = …
Run Code Online (Sandbox Code Playgroud)

python django

5
推荐指数
1
解决办法
168
查看次数

Visual Studio与#Develop - 默认事件处理程序

Visual Studio和SharpDevelop都没有设置委托来以相同的方式处理事件.它们的设置方式略有不同.这使得很难在一个地方使用VS而在另一个地方使用#Develop(在同一个项目中).

例如,在VB中,Visual Studio执行以下操作:

Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
    Me.DialogResult = System.Windows.Forms.DialogResult.OK
    Me.Close()
End Sub
Run Code Online (Sandbox Code Playgroud)

而......

Friend WithEvents OK_Button As System.Windows.Forms.Button
Run Code Online (Sandbox Code Playgroud)

因此,声明控件,不仅具有不同的范围(这也可能是一个问题,但不是这篇文章的主题),但是有一个问题.然后,handle子句将事件处理程序分配给它.

在#Develop中,它是这样完成的......

Sub OK_ButtonClick(sender As Object, e As EventArgs)

End Sub
Run Code Online (Sandbox Code Playgroud)

和......

Private button1 As System.Windows.Forms.Button
Run Code Online (Sandbox Code Playgroud)

然后,在InitializeComponent方法中

AddHandler Me.button1.Click, AddressOf Me.OK_ButtonClick
Run Code Online (Sandbox Code Playgroud)

关于这一点最烦人的事情是,即使它以一种方式完成,另一种ide将重做它,具有重复声明,当然还有编译时错误.

有没有人知道解决这个问题的方法,某种方式来自定义默认处理程序?即使它只是某种方式可以关闭它们,所以它可以手动输入?

.net vb.net sharpdevelop visual-studio

4
推荐指数
1
解决办法
1105
查看次数

仅在反序列化时设置

问题:

我有一个类,比如Foo,它实现了Id属性.Foo必须是可序列化的.Foo.Id应初始化为Foo初始化的新GUID.Foo.Id一旦设置就不应该变化.反序列化将尝试设置Foo.Id,因此必须将其设置为Public.

Private _Id As String=system.Guid.NewGuid.tostring
Public Property Id As String
    Get
        return _Id
    End Get
    Set(ByVal value As String)
        _Id = value
    End Set
End Property
Run Code Online (Sandbox Code Playgroud)

或者对于c#ers

private string _Id = system.Guid.NewGuid().ToString();
public string Id {
    get { return _Id; }
    set { _Id = value; }
}
Run Code Online (Sandbox Code Playgroud)

解决思路:

唯一的解决方案似乎是在设置Foo.Id时抛出运行时异常,但这会在反序列化期间导致问题.因此,不知何故,我们必须确保仅在序列化程序之外进行Set Foo.Id的尝试时抛出异常.某种标志或构造函数中的某些东西?

编辑,反序列化方法......

public static Foo DeserializeFromFile(string sFilespec)
{
    Xml.Serialization.XmlSerializer oSerializer = new Xml.Serialization.XmlSerializer(typeof(Foo));
    System.IO.FileStream oStream = new System.IO.FileStream(sFilespec, IO.FileMode.Open);
    Foo oObject = oSerializer.Deserialize(oStream);
    oStream.Close();
    return oObject;
}
Run Code Online (Sandbox Code Playgroud)

.net c# serialization constructor properties

4
推荐指数
1
解决办法
3261
查看次数

以编程方式隐藏PropertyGrid中的字段

运用

<System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _
Run Code Online (Sandbox Code Playgroud)

关于一个类的声明(它是另一个类的属性),由一个数字属性组成.

我简单地加载了这个类的一个实例......

PropertyGrid1.SelectedObject = oColumn
Run Code Online (Sandbox Code Playgroud)

显然我不想在代码中手动构建propertygrid,我知道如何做到这一点.

但这是问题所在.根据属性的值,某些其他属性不应该是可见的,就像我使用了

<System.ComponentModel.Browsable(False)> _
Run Code Online (Sandbox Code Playgroud)

属性声明中的属性.

无论如何以编程方式执行此操作,而无需手动处理属性网格的所有构建>

.net vb.net propertygrid attributes componentmodel

3
推荐指数
1
解决办法
1万
查看次数

基类中的事件

好的,所以我有一个声明事件的基类StatusTextChanged.我的孩子班,当然不能直接举起这个活动.

所以我结束了这样的事情(为简单起见):

Public MustInherit Class FooBase
    Public Event StatusTextChanged(ByVal StatusText As String)
    Protected Sub RaiseStatusTextChangedEvent(ByVal StatusText As String)
        RaiseEvent StatusTextChanged(StatusText)
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

然后在我打电话的儿童班 MyBase.RaiseStatusTextChangedEvent("something").是否有更好或更推荐的方法来做到这一点?

编辑:VB.NET或C#,它的工作方式基本相同.

编辑:所以在响应之后,我在基类中,然后只在子类中设置StatusText属性...

    Public Event StatusTextChanged(ByVal StatusText As String)
    Private _StatusText As String = "Idle."
    Public Property StatusText() As String
        Get
            Return _StatusText
        End Get
        Protected Set(ByVal value As String)
            RaiseEvent StatusTextChanged(value)
        End Set
    End Property
Run Code Online (Sandbox Code Playgroud)

.net vb.net events derived-class

3
推荐指数
1
解决办法
4940
查看次数

Tortiose SVN修订版

如何在我的存储库中找到修订列表,而无需检查所有内容?我正在寻找一段时间被删除的东西,但我不知道什么时候.我需要获得所有修订的列表,例如修订图,但无需检查所有内容.这有意义吗?

svn tortoisesvn

1
推荐指数
1
解决办法
185
查看次数