我相信这与keyref我有关,但我不确定,我真的不确定它是否可以完成.
例如,假设我有myElement1和myElement2.如果XML文件中没有myElement2,则myElement1必须存在,否则它是可选的.
有没有办法在我的XSD文件中强制进行这种类型的验证?
我有一个带有长名称空间的大型项目,例如
CompanyName.Product.Component.Class
Run Code Online (Sandbox Code Playgroud)
使用沙堡(Sandcastle)构建名称空间的文档,但是那些冗长的名称空间确实破坏了最终chm文件中内容窗格的显示。我如何才能使其Component.Class至少显示在Treeview面板中?
和/或也许具有CompanyName作为扩展到的根节点,Product然后扩展到Component,扩展到Component下的所有名称空间?
更新:我创建了一个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) 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将重做它,具有重复声明,当然还有编译时错误.
有没有人知道解决这个问题的方法,某种方式来自定义默认处理程序?即使它只是某种方式可以关闭它们,所以它可以手动输入?
问题:
我有一个类,比如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) 运用
<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)
属性声明中的属性.
无论如何以编程方式执行此操作,而无需手动处理属性网格的所有构建>
好的,所以我有一个声明事件的基类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 ×5
vb.net ×3
attributes ×1
c# ×1
constructor ×1
django ×1
events ×1
namespaces ×1
properties ×1
propertygrid ×1
python ×1
sandcastle ×1
sharpdevelop ×1
svn ×1
tortoisesvn ×1
xml ×1
xsd ×1