为了检测控制台,正确sys.stderr还是sys.stdout,我正在做以下测试:
if hasattr(sys.stderr, "isatty") and sys.stderr.isatty():
if platform.system()=='Windows':
# win code (ANSI not supported but there are alternatives)
else:
# use ANSI escapes
else:
# no colors, usually this is when you redirect the output to a file
Run Code Online (Sandbox Code Playgroud)
现在,通过IDE(如PyCharm)运行此Python代码时,问题变得更加复杂.最近PyCharm添加了对ANSI的支持,但第一次测试失败:它具有isatty属性但设置为False.
我想修改逻辑,以便正确检测输出是否支持ANSI着色.一个要求是在任何情况下我都不应该在输出重定向到文件时输出一些东西(对于控制台,它是可以接受的).
通过https://gist.github.com/1316877添加了更复杂的ANSI测试脚本
尝试将文本附加到对话框内的编辑控件.我无法正确追加_tcscat_s.它崩溃并说一些关于缓冲区太小或关于空终止字符串的事情.
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
return DialogBox( hInstance, MAKEINTRESOURCE( IDD_MAIN ), NULL, DlgProc );
}
BOOL CALLBACK DlgProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam )
{
switch( Message )
{
case WM_INITDIALOG:
OpenAndReadFile( hwnd );
return TRUE;
case WM_COMMAND:
switch( LOWORD( wParam ) )
{
case IDSTART:
EndDialog( hwnd, IDSTART );
break;
case IDQUIT:
EndDialog( hwnd, IDQUIT );
break;
}
break;
case WM_CLOSE:
EndDialog( hwnd, 0 );
break;
default: …Run Code Online (Sandbox Code Playgroud) Windows窗体中Flowlayout和Tablelayout有什么区别?我知道我可以谷歌,但我的时间有点短.
我的要求也是,当表单调整大小时.调整窗体大小不应该弄乱控件的对齐,它应该对分辨率的变化做出反应.
我读了一些文章并且没有管理解决了我的问题,我的问题是在我尝试获取动态添加到Windows窗体中的控件(CheckBox和ComboBox)的值时,我需要知道何时选中CheckBox(或取消选中) )当按下按钮时,如果ComboBox为空(或不是),则此按钮调用一种方法,在该方法中我验证所有组件是否为空,我按以下方式添加控件:
CheckBox box;
ComboBox cmBox;
for (int i = 1; i <= sumOfRegisters; i++)
{
box = new CheckBox();
box.Name = "CheckBox" + i;
box.Text = "Some text";
box.AutoSize = true;
box.Location = new Point(10, i * 25); //vertical
cmBox = new ComboBox();
cmBox.Name = "ComboBox" + i;
cmBox.Size = new System.Drawing.Size(302, 21);
cmBox.TabIndex = i;
cmBox.Text = "Some Text";
cmBox.Location = new Point(270, i * 25);
this.groupBox.Controls.Add(cmBox);
this.groupBox.Controls.Add(box);
}
Run Code Online (Sandbox Code Playgroud)
"我在ComboBox的情况下添加数据库中的值,我省略了这一部分."
我尝试用foreach获取值:
foreach (Control ctrl in groupBox.Controls)
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何检查Control(CheckBox和ComboBox)是否被检查或为空(视情况而定).
非常感谢您的帮助,感谢您的时间.
我正在尝试实现一个CheckBox ComboBox。我按照此链接作为参考
但是此示例存在一些问题。
1)显示下拉列表后,单击鼠标第一次更改所选项目的检查状态总会失败,但是可以单击成功。似乎第一次点击就被吞没了。我做了一些跟踪工作,但找不到答案。
2)当列表打开时,表单失去焦点。
Visual Studio 2010,C#
我有ComboBox一个DropDown,AutoComplete设置SuggestAppend和AutoCompleteSource距离ListItems.用户将数据键入其中,直到具有正确的条目.如果数据与列表项之一匹配,则组合框旁边的按钮被禁用.
如果用户点击Tab键,则自动完成功能会接受当前建议.它还会移动到启用的选项卡序列中的下一个控件.当然,因为我希望它转到disbabled按钮,我需要在验证条目后立即启用它.
问题是,没有我试过事件,PreviewKeyDown,LostFocus,SelectedIndexChanged让我使按钮的时间它被处理连线和接收焦点.它始终以Tab键顺序进入下一个按钮,该按钮始终处于启用状态.
我准备好让按钮保持启用状态,如果太快按下它就会出错,但我不想这样做.我也不想进入特殊模式标志来跟踪这些控件何时获得焦点.验证似乎是正常的事情,但我被困住了.
如果在SelectedIndexChanged用户进行匹配时工作,这将很容易.当盒子清除时,或者当找到类型匹配时,它不会触发.
我试图在VCL Forms应用程序中同步滚动两个TDBGrid组件,我很难拦截每个网格组件的WndProc而没有一些堆栈问题.我尝试在滚动事件下发送WM_VSCROLL消息,但这仍然导致不正确的操作.它需要用于单击滚动条,以及突出显示单元格或向上或向下鼠标按钮.整个想法是让两个网格彼此相邻,显示一种匹配对话框.
试着
SendMessage( gridX.Handle, WM_VSCROLL, SB_LINEDOWN, 0 );
Run Code Online (Sandbox Code Playgroud)
也
procedure TForm1.GridXCustomWndProc( var Msg: TMessage );
begin
Msg.Result := CallWindowProc( POldWndProc, gridX.Handle, Msg.Msg, Msg.wParam, Msg.lParam );
if ( Msg.Msg = WM_VSCROLL ) then
begin
gridY.SetActiveRow( gridX.GetActiveRow );
gridY.Perform( Msg.Msg, Msg.wParam, Msg.lParam );
SetScrollPos( gridY.Handle, SB_VERT, HIWORD( Msg.wParam ), True );
end;
end;
Run Code Online (Sandbox Code Playgroud)
和
procedure TForm1.GridxCustomWndProc( var Msg: TMessage );
begin
if ( Msg.Msg = WM_VSCROLL ) then
begin
gridY.SetActiveRow( gridX.GetActiveRow );
gridY.Perform( Msg.Msg, Msg.wParam, Msg.lParam );
SetScrollPos( gridY.Handle, SB_VERT, HIWORD( …Run Code Online (Sandbox Code Playgroud) 我正在AxMSTSCLib开发用于创建 RDP 连接的 Windows 应用程序。
下面列出的步骤导致我的远程桌面显示消失:
如果我跳过第 2 步和第 3 步,当我从连接栏中单击“最小化”按钮时它不会消失,这真的很奇怪。
我在这里发布了我的部分代码,希望任何人都可以帮助我找出问题所在。
public partial class RdpShowForm : Form
{
public AxMSTSCLib.AxMsRdpClient9NotSafeForScripting oRemote;
public RdpShowForm()
{
InitializeComponent();
oRemote = new AxMSTSCLib.AxMsRdpClient9NotSafeForScripting();
((System.ComponentModel.ISupportInitialize)(this.oRemote)).BeginInit();
oRemote.Dock = System.Windows.Forms.DockStyle.Fill;
oRemote.Enabled = true;
oRemote.Name = "WindowsVM";
this.Controls.Add(oRemote); // Controls contains 'panel1' and 'oRemote'
((System.ComponentModel.ISupportInitialize)(this.oRemote)).EndInit();
oRemote.CreateControl();
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
}
private void RdpShowForm_Load(object sender, EventArgs e)
{
NewRdpConnectionInstance();
}
private void NewRdpConnectionInstance()
{
oRemote.Server = 'xxx';
...
oRemote.FullScreen …Run Code Online (Sandbox Code Playgroud)