我正在编写一个程序,向用户显示他们的IP地址,子网掩码和默认网关.我可以得到前两个,但对于最后一个,这就是我出现的:
GatewayIPAddressInformationCollection gwc =
System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses;
Run Code Online (Sandbox Code Playgroud)
当然,这会返回一个集合GatewayIPAddressInformation.因此,如果计算机有多个网关,我如何确定哪个是默认网关?
在实践中,我只看到过这个集合包含一个条目,但由于它是作为集合实现的,因此有些计算机包含多个网关,其中没有一个被标记为"默认".那么有没有办法确定默认值还是只是猜测?
我在HTML中有几个元素,我想在它们换行时保持分组.我认为答案在于一些CSS(或者甚至是JavaScript),但我不确定.例如,我有几个元素,如下所示:
<label A><input A><label B><input B><label C><input C>
Run Code Online (Sandbox Code Playgroud)
用户有时会调整浏览器窗口的大小,我们最终会得到以下结果:
<label A><input A><label B>
<input B><label C><input C>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,输入B不在其输入元素的旁边.有没有办法将标签和输入分组,以便它们包装在一起?我已经尝试了div并将元素放在一个带有"nowrap"的表中,结果好坏参半.我不介意线条包装,我只需要将标签和输入元素保持在一起.
我在这里有一个有趣的JUnit问题(JUnit 4.12).我有一个只有静态方法的基类.它们必须是静态的,因为它们的使用方式.我从基类继承了其他类.所以,如果基类是Base,我们有ChildA和ChildB.
大多数方法都包含在基类中,但它必须知道它实际上是哪个子项(只是调用方法,因为基类是无效的).这是通过基类中的静态数据成员完成的:
public class Base {
protected static ChildType myType = ChildType.Invalid;
...
}
Run Code Online (Sandbox Code Playgroud)
每个子项都通过静态初始化程序设置数据成员,因此:
static {
myType = ChildType.ChildA;
}
Run Code Online (Sandbox Code Playgroud)
然后,当调用方法时,基类知道它是什么类型并加载适当的配置(类型实际上是配置名称).
这一切都在运行应用程序时完美运行.在调试器和日志消息中逐步执行它,我可以看到设置了适当的类型,并且方法根据子类型加载适当的配置.
使用JUnit时出现问题.我们有一些JUnit测试来测试每个基类方法.由于仅在基类上调用方法无效,因此我们在子类上调用方法,因此:
bool result = ChildA.methodTwo();
Run Code Online (Sandbox Code Playgroud)
这''总是失败''.为什么?永远不会调用静态初始化程序.将代码作为应用程序运行时,它会被调用,每个人都很高兴.当我将其作为JUnit测试运行时,将跳过静态初始化程序,并且方法具有无效数据.什么是JUnit跳过静态初始化程序?有办法解决吗?
细节
实际上,我们没有像上面发布的那样调用方法.我只想让这个例子尽可能清楚.实际上,我们有一个用Jersey框架编写的Web服务.调用的方法是REST端点之一.
@POST
@Produces(MediaType.TEXT_PLAIN)
public String methodPost() {
...
return new String( itWorked ? "success" : "fail" );
}
Run Code Online (Sandbox Code Playgroud)
我们这样称呼它(对于丑陋的语法感到抱歉,这只是它的工作方式):
@Test
public void testThePost() throws Exception {
javax.ws.rs.core.Response response = target("restapi/").request().post(Entity.entity(null, MediaType.TEXT_PLAIN));
assertEquals( 200, response.getStatus() );
}
Run Code Online (Sandbox Code Playgroud)
所有GET测试都可以工作,并且所有这些测试都会调用静态初始化程序.只是这个POST失败了,只有在运行JUnit测试时才会失败.
我有一个C#应用程序,需要允许用户更改计算机名称.这是一项非常特权的操作.如果用户以管理员身份运行应用程序(Windows 7,右键单击可执行文件,"以管理员身份运行"),我只能让它工作.很好,但用户是管理员,那么,为什么他们需要运行AS管理员?我试了好几次.如果用户(管理员)尝试正常运行应用程序,它总是会失败.如果它们以"以管理员身份运行"运行,它始终有效.
如果答案是"它只是以这种方式运行,即使你是管理员,你也必须以管理员身份运行",我的问题是如何检测它们是否以超级管理员权限运行?我发现了这一点,但它只是检查用户是否属于管理员用户组,我已经指出,这是不够的(并抛出空指针异常).
我在这里错过了什么吗?我是否需要从另一个角度来接近它?
我正在对传统MFC应用程序执行维护.我们需要在"帮助"对话框中禁用"打印"按钮.没有打印机连接到系统,如果用户按下帮助窗口中的"打印"按钮,应用程序将崩溃.
代码只使用标准HtmlHelpA方法打开Windows帮助对话框:
void CNiftyView::OnHelp()
{
CString csHelpFile;
csHelpFile.Format( "%s/NiftyHelp.chm", NiftyDoc::GetHelpPath() );
::HtmlHelpA( m_hWnd, csHelpFile, HH_HELP_CONTEXT, IDH_NIFTY_SECTION );
}
Run Code Online (Sandbox Code Playgroud)
我已经找到了一些信息,我们可以使用帮助HTML样式表(http://www.sagehill.net/docbookxsl/HtmlHelp.html)中的一些代码来取消打印按钮.但这需要重新编译帮助文件,我宁愿不这样做.我还发现了一些信息,说明你可以通过操纵每个窗格的HH_WINTYPE结构来自定义HTML帮助查看器,但是没有关于你如何实际操作的信息(http://msdn.microsoft.com/en-us/library/ms524435%28v = vs.85%29.aspx).
有没有办法以编程方式在HTML帮助查看器中禁用该打印按钮?
正如标题所说,我正在尝试打印由xaml创建的页面(页面看起来像一个表单)
在表单的末尾,我有一个带有事件Click的按钮.
<Button Grid.Row="15"
Grid.Column="3"
Click="ImpressionClick"
Height="50"
Width="150"
Grid.RowSpan="2"
Grid.ColumnSpan="3"
Content="Imprimer">
</Button>
Run Code Online (Sandbox Code Playgroud)
我的问题是:我已经找到了如何使用C#打印一些文本文档,但我不知道如何打印使用xaml代码创建的页面.
如果有人知道如何.
提前致谢.
Florian SELVA
我有一个WPF应用程序,我正在尝试正确定位元素.只有四个元素,所以它应该是非常简单的,但我不能让它工作.
一个问题是,当窗口出现时,窗口会将其自身调整为(大约)桌面窗口的大小,因此它没有固定的大小.
这些元素应该从上到下堆叠,因此Stack Panel看起来很自然.但是第三个元素必须占据前两个和底部没有的剩余空间.无论我尝试什么,它要么占用太多空间,要么占用太少空间.如果我给它一个具体的像素大小,我似乎只能让它工作,如上所述,它将无法工作.
我尝试过的最新产品是Dock Panel.虽然它在Visual Studio设计器中看起来是正确的,但在执行时,第三个元素 - Canvas - 完全覆盖了底部元素.
我的XAML:
<DockPanel>
<Button x:Name="btnClose" DockPanel.Dock="Top" Content="X"
HorizontalAlignment="Right" Margin="0,5,5,0" VerticalAlignment="Top"
Width="Auto" Height="Auto" Background="Black"
Foreground="White" Click="btnClose_Click"/>
<Label x:Name="lblTitle" DockPanel.Dock="Top" Content="My Title"
HorizontalAlignment="Center" VerticalAlignment="Top" Width="Auto"
Foreground="White" FontWeight="Bold" FontSize="22"/>
<Label x:Name="lblControls" DockPanel.Dock="Bottom" Content="Placeholder"
HorizontalAlignment="Center" VerticalAlignment="Bottom" Width="Auto"
Height="Auto" Foreground="White" FontWeight="Bold" FontSize="22"/>
<Border x:Name="CanvasBorder" BorderBrush="White" BorderThickness="5" >
<Canvas x:Name="cvsChart" Grid.Row="0" HorizontalAlignment="Stretch"
VerticalAlignment="Top" Width="Auto">
</Canvas>
</Border>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
有关如何让Canvas伸展并填充其他三个不占用的空间的任何想法?
更新 由于@Peter Duniho几乎向我证明代码有效,我尝试了一个实验并删除了我在窗口出现时的调整代码.拿出来,窗口看起来绝对正确.这就是我要将其大小调整为(大部分)桌面大小的方法:
public const int WINDOW_OFFSET = 10;
...
int screenWidth = (int)System.Windows.SystemParameters.PrimaryScreenWidth;
int screenHeight = (int)System.Windows.SystemParameters.PrimaryScreenHeight; …Run Code Online (Sandbox Code Playgroud) 我有一个包含大量单元测试的 Java 项目。在 Visual Studio Code 中,我可以从 \xe2\x80\x9cTesting\xe2\x80\x9d 选项卡运行所有测试。然而,有几个失败了,因为我需要提供一些必需的虚拟机参数才能使它们正常运行。我们使用 Maven 作为我们的构建系统。
\n我知道提供 VM 参数的语法,但我无法\xe2\x80\x99 找到 JUnit 测试的启动配置。我刚刚自动生成了一个launch.json,但它没有\xe2\x80\x99t 有 Junit 配置。然而,VS Code 清楚地知道如何启动单元测试,因为当我告诉它执行该操作时(从“测试”窗格),它会运行它们(甚至是那些出错的测试)。
这个答案(Visual Studio Code launch.json file for JUnit?)表明我只需右键单击单元测试即可提供选项,但我得到的只是:
\n自动生成的 launch.json 非常基本。它生成的两个配置有点无用,因为它\xe2\x80\x99是一个库,而不是一个可执行程序。
\n{\n "version": "0.2.0",\n "configurations": [\n {\n "type": "java",\n "name": "Launch Current File",\n "request": "launch",\n "mainClass": "${file}"\n },\n {\n "type": "java",\n "name": "Launch RunObject",\n "request": "launch",\n "mainClass": "com.ourcompany.RunObject",\n "projectName": "OurCommon"\n }\n …Run Code Online (Sandbox Code Playgroud) 我正在尝试一个使用数组的短代码,当我调用我的函数WordReplace时,我基本上想要替换仇恨这个词,但是我继续打印相同的东西:
我不爱c ++我不喜欢c ++
我尝试了不同的东西,但我不确定是什么问题
#include <iostream>
#include <string>
using namespace std;
void WordReplace(string*x, int start, int end, string g, string w)
{
for (int z = start; z <= end; z++)
{
if (x[z] == g)
x[z] == w;
cout << x[z]<<" ";
}
}
int main()
{
string x[4] = {"I", "don't", "hate", "c++"};
for (int i = 0; i < 4; i++)
{
cout << x[i] << " ";
}
cout << endl;
WordReplace(x, 0, 3, "hate", …Run Code Online (Sandbox Code Playgroud)