NSWindowController 多个窗口之间传递值

NSWindowController 多个窗口之间传递值

主界面一个按钮点击,出现另一个窗口,然后输入123,点OK,在主界面的编辑框内可以得到123这个值,

思路:

由于要给主界面的控件赋值,所以在第二个窗口里面设定一个同类型的变量。

然后主界面的控件 = 第二个窗口的同类型变量。

例如:主界面是

NSTextField 控件1,

那么就在子窗口里面设定这样一个变量(NSTextField a1),给值。

然后在主界面调用时,让主界面的NSTextField 控件1 =a1

这样主界面就可以得到子界面的值了。

子界面代码如下

H文件

//
//  Form1.h
//  test_multi_window
//
//  Created by EDU on 3/6/14.
//  Copyright (c) 2014 EDU. All rights reserved.
//
#import <Cocoa/Cocoa.h>

@interface Form1 : NSWindowController

@property (assign) IBOutlet NSWindow *window_form1;

@property (assign) NSInteger *button_ok_flag;
@property (assign) NSString *button_string;
@property (assign) IBOutlet NSTextField *m_Edit1;
@property (assign) IBOutlet NSTextField *form_main;
@property (assign) IBOutlet NSTextField *form_main_m_ET1;
@property bool form_ok_cancel_result;
-(void)get_value;
@end

M文件

//
//  Form1.m
//  test_multi_window
//
//  Created by  on 3/6/14.
//  Copyright (c) 2014 EDU. All rights reserved.
//

#import "Form1.h"
#import "EDUAppDelegate.h"
@interface Form1 ()

@end

@implementation Form1
@synthesize form_main;
@synthesize form_main_m_ET1;
@synthesize window_form1;
@synthesize button_ok_flag;
@synthesize button_string;
@synthesize m_Edit1;
@synthesize form_ok_cancel_result;

- (id)initWithWindow:(NSWindow *)window
{
    NSLog (@"init()");

    self = [super initWithWindow:window];

    if (self)
    {

    }
    return self;
}

- (void)windowDidLoad
{
    [super windowDidLoad];
}

- (IBAction)OnBT_OK:(id)sender
{
    form_main.stringValue = @"OK";
    form_ok_cancel_result = true;
    [self get_value];
    [super close];
}

- (IBAction)OnBT_Cancel:(id)sender
{
    form_main.stringValue = @"CANCEL";
    form_ok_cancel_result = false;
    [self get_value];
    [super close];
}

-(void)get_value
{
    form_main_m_ET1.stringValue = m_Edit1.stringValue;
}

@end

主窗口代码如下

H文件

//
//  EDUAppDelegate.h
//  test_multi_window
//
//  Created by  on 3/6/14.
//  Copyright (c) 2014 EDU. All rights reserved.
//

#import <Cocoa/Cocoa.h>
#import "Form1.h"

@interface EDUAppDelegate : NSObject <NSApplicationDelegate>

@property (assign) Form1 *m_form1;

@property (assign) IBOutlet NSWindow *window;

@property (assign) IBOutlet NSTextField *m_label1;

@property (assign) IBOutlet NSTextField *m_ET1;

@end

M文件

//
//  EDUAppDelegate.m
//  test_multi_window
//
//  Created by EDU on 3/6/14.
//  Copyright (c) 2014 EDU. All rights reserved.
//

#import "EDUAppDelegate.h"

@implementation EDUAppDelegate

@synthesize m_form1;
@synthesize m_label1;
@synthesize window;
@synthesize m_ET1;

- (void)dealloc
{
    [super dealloc];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (IBAction)OnBT_Form1:(id)sender
{
    if(!m_form1)
    {
        m_form1 = [[Form1 alloc] initWithWindowNibName:@"Form1"];
    }
    m_form1.window.title = @"Hello,this is a test";
    m_form1.form_main = m_label1;
    m_form1.form_main_m_ET1=m_ET1;
    [m_form1 showWindow: sender];
}
@end

运行编译OK

如图:

完成!

NSWindowController 多个窗口之间传递值

时间: 2024-12-19 03:03:46

NSWindowController 多个窗口之间传递值的相关文章

ASP.NET页面之间传递值的几种方式

页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.

不同页面之间传递值

本篇技巧和诀窍记录的是:不同页面之间传递值,非常简单的技巧,我相信大家都知道. 这个场景太常见了,当然有许多许多的方法,我来介绍一种非常简单的方法吧! 第一步:模拟两个页面 A页面.B页面.需要在B页面获取A页面的信息. A页面: <form id="form1" runat="server"> <asp:TextBox ID="TextBox1" runat="server"></asp:Tex

ASP.NET页面之间传递值(1):QueryString

QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了. 这种方法的优点:1.使用简单,对于安全性要求不高时传递数字或是文本值非常有效. 这种方法的缺点:1.缺乏安全性,由于它的值暴露在浏览器的URL地址中的. 2.不能传递对象. 使用方法:1.在源页面的代码中用需要传递的名称和值构造URL地址. 2.在源页面的代码用Response.Redi

ASP.NET页面之间传递值(4):Server.Transfer

这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效. Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通过 Context.Handler来获得前一个页面传递的各种数据类型的值.表单数据.QueryString.由于重定向完全在服务器端完成,所以客户端 浏览器中的URL地址是不会改变的.调用Server

ASP.NET页面之间传递值(2):Session

想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽. 优点:1.使用简单,不仅能传递简单数据类型,还能传递对象. 2.数据量大小是不限制的. 缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源. 2.容易丢失. 使用方法:1.在源页面的代码中创建你需要传递的名称和值构造Session变量:Session["Name"]="Value(Or Object)"; 2.在目

ASP.NET页面之间传递值(5):Application

Application对象的作用范围是整个全局,也就是说对所有用户都有效.它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所 以可以在不同页面中对它进行存取.它和Session变量的区别在于,前者是所有的用户共用的全局变量,后者是各个用户独有的全局变量. 可能有人会问,既然所有用户都可以使用application变量,那他可以用在什么场合呢?这里举个例子:网站访问数.多个请求访问时都可以对它进行操作. 优点:1.使用简单,消耗较少的服务器资源. 2.不仅能传递简单数据,还能传递对象

ASP.NET页面之间传递值(3):Cookie

这个也是大家常使用的方法,Cookie用于在用户浏览器上存储小块的信息,保存用户的相关信息,比如用户访问某网站时用户的ID,用户的偏好等, 用户下次访问就可以通过检索获得以前的信息.所以Cookie也可以在页面间传递值.Cookie通过HTTP头在浏览器和服务器之间来回传递的. Cookie只能包含字符串的值,如果想在Cookie存储整数值,那么需要先转换为字符串的形式. 与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在

ASP.NET页面之间传递值的几种方式 (转)

页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer. 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.

[转载]ASP.NET页面之间传递值的几种方式

页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer. 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.